Merge remote-tracking branch 'origin/Alexis' into Emmanuel
Récupère la FAQ de la page d'accueil et la refonte de la page Contact, ainsi que la chaîne CI/CD et l'infrastructure VPS HTTPS venues de main. Résolution des 13 conflits : - Footer : les deux corrections sont conservées. FooterLink sort du composant (Alexis), la grille passe en une colonne sous 640 px et l'adresse email peut se couper (audit responsive). - Admin : le BOM du CSV adopte la séquence échappée d'Alexis, plus lisible que le caractère invisible et sans règle de lint à désactiver. - Contact : version d'Alexis retenue, plus complète, avec son formulaire. - Connexion, Inscription : logos SVG conservés dans leur version nettoyée, avec aria-hidden ; les gestionnaires OAuth et les champs d'inscription restent en place. - UserNav, Profile, services/admin : versions locales conservées. - docker-compose : structure Traefik et domaines HTTPS d'Alexis, sur lesquels sont regreffés FRONTEND_URL et les identifiants OAuth par substitution. - Les deux package-lock régénérés depuis les package.json fusionnés. Aligne au passage les derniers chemins d'API restés relatifs sur VITE_API_URL, sans quoi le bouton Google et la configuration du jeu visaient le domaine du front en déploiement. Fiabilise trois tests de tirage au sort : la table GrandPrizeWinner est unique pour tout le jeu et le vivier contient de vrais comptes, donc les suites mettent désormais un éventuel tirage réel de côté et n'attendent plus de connaître le gagnant à l'avance.
This commit is contained in:
@@ -1,125 +1,120 @@
|
||||
import { Link, useLocation } from 'react-router-dom'
|
||||
import { useAuth } from '../context/AuthContext'
|
||||
|
||||
|
||||
function FooterLink({ to, children, className = '', pathname }) {
|
||||
return pathname === to ? (
|
||||
<span className={className}>{children}</span>
|
||||
) : (
|
||||
<Link to={to} className={className}>
|
||||
{children}
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
|
||||
export default function Footer() {
|
||||
const { pathname } = useLocation()
|
||||
const { user } = useAuth()
|
||||
const isLoggedIn = !!user
|
||||
|
||||
function FooterLink({ to, children, className=''}) {
|
||||
return pathname === to ? (
|
||||
<span className={className}>{children}</span>
|
||||
) : (
|
||||
<Link to={to} className={className}>
|
||||
{children}
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<footer className="bg-[#006B6B] text-white">
|
||||
|
||||
|
||||
|
||||
{/* Partie principale */}
|
||||
<div className="max-w-7xl mx-auto px-6 py-10 grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 gap-8">
|
||||
|
||||
|
||||
{/* Logo */}
|
||||
<div>
|
||||
<FooterLink to='/accueil'>
|
||||
<FooterLink
|
||||
to="/accueil"
|
||||
pathname={pathname}
|
||||
>
|
||||
<h3 className="text-xl font-bold mb-3">
|
||||
Thé Tip Top
|
||||
</h3>
|
||||
</FooterLink>
|
||||
|
||||
|
||||
<p className="text-teal-100 text-sm leading-relaxed">
|
||||
Participez au jeu-concours Thé Tip Top et tentez de gagner
|
||||
des lots gourmands autour du thé.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
{/* Navigation */}
|
||||
<div>
|
||||
|
||||
<h3 className="text-lg font-semibold mb-5">
|
||||
Navigation
|
||||
</h3>
|
||||
|
||||
|
||||
|
||||
<ul className="space-y-3 text-teal-100">
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/accueil"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Accueil
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/regles-jeu"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Règles du jeu
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/saisir-code-unique"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Tester mon code
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
{ !isLoggedIn && (
|
||||
|
||||
{!isLoggedIn && (
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/inscription"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Créer un compte
|
||||
</FooterLink>
|
||||
</li>
|
||||
)}
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{/* Informations légales */}
|
||||
<div>
|
||||
|
||||
<h3 className="text-lg font-semibold mb-5">
|
||||
Informations
|
||||
</h3>
|
||||
|
||||
|
||||
|
||||
<ul className="space-y-3 text-teal-100">
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/mentions-legales"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Mentions légales
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/confidentialite"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Politique de confidentialité
|
||||
@@ -129,6 +124,7 @@ export default function Footer() {
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/accessibilite"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Accessibilité
|
||||
@@ -138,83 +134,80 @@ export default function Footer() {
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/cgu"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
CGU
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/contact"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Contact
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<FooterLink
|
||||
to="/sitemap"
|
||||
pathname={pathname}
|
||||
className="hover:text-white transition"
|
||||
>
|
||||
Plan du site
|
||||
</FooterLink>
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{/* Contact */}
|
||||
<div>
|
||||
|
||||
<h3 className="text-lg font-semibold mb-5">
|
||||
Contact
|
||||
</h3>
|
||||
|
||||
|
||||
<p className="text-teal-100 text-sm mb-3">
|
||||
Une question sur le jeu ?
|
||||
</p>
|
||||
|
||||
<a href="tel:+33184802034" className="block mt-2 font-medium hover:text-teal-300">
|
||||
|
||||
<a
|
||||
href="tel:+33184802034"
|
||||
className="block mt-2 font-medium hover:text-teal-300"
|
||||
>
|
||||
01 84 80 20 34
|
||||
</a>
|
||||
|
||||
<a href="mailto:contact@thetiptop.fr" className="inline-block mt-3 font-medium break-all hover:text-teal-300">
|
||||
contact@thetiptop.fr
|
||||
</a>
|
||||
|
||||
|
||||
<p className="text-teal-100 text-sm mt-2">
|
||||
18 rue Léon Frot
|
||||
<br />
|
||||
75011 Paris, France
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
{/* Barre basse */}
|
||||
|
||||
<div className="border-t border-teal-800">
|
||||
|
||||
<div className="max-w-7xl mx-auto px-6 py-5 flex flex-col md:flex-row justify-between items-center gap-3">
|
||||
|
||||
|
||||
<p className="text-teal-200 text-sm">
|
||||
|
||||
<p className="text-teal-200 text-sm text-center md:text-left">
|
||||
© {new Date().getFullYear()} Thé Tip Top. Tous droits réservés.
|
||||
<br className="md:hidden" />
|
||||
<span className="md:before:content-['_—_']">
|
||||
Projet étudiant fictif — aucun achat ni réservation réel ne peut être effectué sur ce site.
|
||||
</span>
|
||||
</p>
|
||||
|
||||
|
||||
<div className="flex gap-5 text-sm text-teal-200">
|
||||
|
||||
<a
|
||||
href="https://www.facebook.com/profile.php?id=61590449280854"
|
||||
target="_blank"
|
||||
@@ -223,8 +216,7 @@ export default function Footer() {
|
||||
>
|
||||
Facebook
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a
|
||||
href="https://www.instagram.com/thetiptop.gp4?igsh=MXZ3YzZ0d3dkazBpeg%3D%3D&utm_source=qr"
|
||||
target="_blank"
|
||||
@@ -233,8 +225,7 @@ export default function Footer() {
|
||||
>
|
||||
Instagram
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a
|
||||
href="https://www.tiktok.com/@thetiptop4"
|
||||
target="_blank"
|
||||
@@ -243,15 +234,11 @@ export default function Footer() {
|
||||
>
|
||||
TikTok
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</footer>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user