{{-- Composant ModaleCandidature — porte de la modale "candidature" presente dans maquettes/Offres.dc.html, maquettes/Offre.dc.html et maquettes/Recrutement.dc.html (structure identique dans les 3 pages). Formulaire en 2 etapes cote visuel (JS vanilla, public/js/site.js gere le show/hide), mais soumission classique unique en POST vers route('leads.candidature.store') : tous les champs des 2 etapes sont presents dans le DOM en permanence, seule leur visibilite change. Ainsi aucune donnee n'est perdue et la validation Laravel s'applique a l'unique soumission. Champs alignes sur app/Http/Requests/StoreCandidatureRequest.php : offre_emploi_id (nullable), nom_prenom, telephone, email, poste_souhaite, cv (fichier requis), lettre_motivation (fichier optionnel), disponibilite, annees_experience, message, consentement_rgpd. Props : - offreEmploiId (int|null, defaut null) : pre-remplit le champ cache offre_emploi_id pour une candidature liee a une offre precise (page Offre.dc.html). Laisse a null pour une candidature spontanee (Offres.dc.html liste, Recrutement.dc.html). - posteSouhaite (string|null, defaut null) : pre-remplit le champ texte "poste souhaite" (ex: titre de l'offre consultee). Ouverture : - au clic sur tout element portant l'attribut data-ouvre-candidature (voir public/js/site.js) ; - automatiquement si la page est rechargee avec des erreurs de validation portant sur les champs de ce formulaire (voir $errors plus bas), pour ne pas perdre l'utilisateur apres un POST invalide ; - automatiquement si l'ancre #postuler est presente dans l'URL au chargement (equivalent du on-apply de la maquette). --}} @props([ 'offreEmploiId' => null, 'posteSouhaite' => null, ]) @php // Champs proteges par ce formulaire (voir StoreCandidatureRequest) : sert // a determiner si la modale doit se rouvrir automatiquement apres un POST // invalide (evite de rouvrir la modale pour une erreur d'un AUTRE // formulaire de la page, ex: rappel ou contact). $champsEtape1 = ['nom_prenom', 'telephone', 'email', 'poste_souhaite']; $champsEtape2 = ['cv', 'lettre_motivation', 'disponibilite', 'annees_experience', 'message', 'consentement_rgpd']; // Rouvre la modale automatiquement soit apres une erreur de validation // portant sur un de ses champs, soit juste apres un envoi reussi (pour // afficher l'ecran de confirmation "Candidature envoyee !", $doitRouvrir // vaut alors true grace a session('succes')). $doitRouvrir = $errors->hasAny([...$champsEtape1, ...$champsEtape2]) || session()->has('succes'); $etapeAvecErreur = $errors->hasAny($champsEtape2) ? 2 : 1; @endphp