# Documentation du `RecaptchaProvider` Le `RecaptchaProvider` est un composant React qui encapsule la logique d’intégration de Google reCAPTCHA avec gestion des cookies et état du formulaire. Il fonctionne avec **Inertia.js** et **React**, et simplifie l’activation du reCAPTCHA dans n’importe quel formulaire. --- ## 1. Installation et import ```tsx import { RecaptchaProvider, useRecaptcha } from "@/front/providers/RecaptchaProvider"; // Ensuite, enveloppe ton formulaire avec le provider : // Tu peux être plus propre et entourer tout ton Applayout, ce qui évite d'encapsuler chaque formulaire {children} ``` ## 2. Fonctionnement général Le provider expose : - `enabled` : `boolean` indiquant si le reCAPTCHA est activé (cookie accepté). - `getToken()` : fonction pour récupérer le token généré par Google reCAPTCHA. - `formRef` : référence vers le `
` HTML, utilisée pour injecter le conteneur reCAPTCHA et désactiver le formulaire si nécessaire. ### 2.1 Gestion automatique des cookies Le provider utilise le hook `useCookieNotice` pour vérifier si l’utilisateur a accepté le service RECAPTCHA. - Si accepté → le reCAPTCHA est initialisé sur le formulaire. - Si non accepté → le formulaire reste inert, empêchant toute interaction jusqu’à ce que l’utilisateur donne son consentement. ### 2.2 Injection du formulaire Le provider utilise `InitRecaptcha([formRef.current])` pour : - Créer un `
` dans le formulaire. - Charger le script Google reCAPTCHA de manière asynchrone. - Gérer le reset du reCAPTCHA si nécessaire. ### 2.3 Désactivation du formulaire Le formulaire est automatiquement rendu `inert` tant que le reCAPTCHA n’est pas actif. Cela empêche les utilisateurs d’envoyer le formulaire avant d’avoir accepté les cookies. ## 3. Utilisation du hook useRecaptcha Dans un composant enfant du provider, tu peux accéder au contexte avec : ```tsx const { enabled, getToken, formRef } = useRecaptcha(); ``` Exemples : - Vérifier si le reCAPTCHA est activé : ```tsx if (!enabled) { console.log("Le reCAPTCHA n'est pas actif"); } ``` - Récupérer le token au moment du submit : ```tsx const token = getToken(); data["g-recaptcha-response"] = token; post(route('contact.submit'), { data }); ``` - Associer formRef à un `` : ```tsx ... ``` ## 4. Exemple complet avec Inertia ```tsx post(route("contact.submit"), { data: formData })} > setFormData("email", e.target.value)} />