diff --git a/Front-End/src/components/Inscription/InscriptionFormShared.js b/Front-End/src/components/Inscription/InscriptionFormShared.js index ad8fff6..a117000 100644 --- a/Front-End/src/components/Inscription/InscriptionFormShared.js +++ b/Front-End/src/components/Inscription/InscriptionFormShared.js @@ -23,6 +23,7 @@ import StudentInfoForm from '@/components/Inscription/StudentInfoForm'; import ResponsableInputFields from '@/components/Inscription/ResponsableInputFields'; import PaymentMethodSelector from '@/components/Inscription/PaymentMethodSelector'; import ProgressStep from '@/components/ProgressStep'; +import { CheckCircle, Loader2 } from 'lucide-react'; /** * Composant de formulaire d'inscription partagé @@ -70,9 +71,81 @@ export default function InscriptionFormShared({ const [isPage1Valid, setIsPage1Valid] = useState(false); const [isPage2Valid, setIsPage2Valid] = useState(false); const [isPage3Valid, setIsPage3Valid] = useState(false); + const [isPage4Valid, setIsPage4Valid] = useState(false); const [hasInteracted, setHasInteracted] = useState(false); + // État pour suivre l'index du fichier en cours + const [currentTemplateIndex, setCurrentTemplateIndex] = useState(0); + + useEffect(() => { + // Trouver le premier template non signé + const firstUnsignedIndex = schoolFileTemplates.findIndex( + (template) => template.file === null + ); + + // Mettre à jour l'index du template actuel + if (firstUnsignedIndex !== -1) { + setCurrentTemplateIndex(firstUnsignedIndex); + } else { + // Si tous les templates sont signés, définir un index hors limites + setCurrentTemplateIndex(schoolFileTemplates.length); + } + }, [schoolFileTemplates]); + + useEffect(() => { + // Vérifier si tous les templates ont leur champ "file" différent de null + const allSigned = schoolFileTemplates.every((template) => template.file !== null); + + // Mettre à jour isPage4Valid en fonction de cette condition + setIsPage4Valid(allSigned); + + if (allSigned) { + setCurrentTemplateIndex(0); + } + }, [schoolFileTemplates]); + + const handleTemplateSigned = (index) => { + const template = schoolFileTemplates[index]; + + if (!template) { + logger.error('Template introuvable pour l\'index donné.'); + return; + } + + downloadTemplate(template.slug) + .then((data) => fetch(data)) + .then((response) => response.blob()) + .then((blob) => { + const file = new File( + [blob], + `${template.name}.pdf`, + { type: blob.type } + ); + const updateData = new FormData(); + updateData.append('file', file); + + return editRegistrationSchoolFileTemplates( + template.id, + updateData, + csrfToken + ); + }) + .then((data) => { + logger.debug('Template mis à jour avec succès :', data); + + // Mettre à jour l'état local de schoolFileTemplates + setSchoolFileTemplates((prevTemplates) => + prevTemplates.map((t, i) => + i === index ? { ...t, file: data.file } : t + ) + ); + }) + .catch((error) => { + logger.error('Erreur lors de la mise à jour du template :', error); + }); + }; + useEffect(() => { fetchSchoolFileTemplatesFromRegistrationFiles(studentId).then((data) => { setSchoolFileTemplates(data); @@ -277,7 +350,7 @@ export default function InscriptionFormShared({ setStep={setCurrentPage} isStepValid={isStepValid} /> -
- {schoolFileTemplates[currentPage - 2].description || - 'Aucune description disponible pour ce document.'} -
-+ {schoolFileTemplates[currentTemplateIndex].description || + 'Aucune description disponible pour ce document.'} +
+ + {schoolFileTemplates[currentTemplateIndex].file === null ? ( +