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} /> -
+
{/* Page 1 : Informations sur l'élève */} {currentPage === 1 && ( - {schoolFileTemplates.length > 0 && ( -
- {/* Titre du document */} -
-

- {schoolFileTemplates[currentPage - 2].name || - 'Document sans nom'} -

-

- {schoolFileTemplates[currentPage - 2].description || - 'Aucune description disponible pour ce document.'} -

-
- - {/* Affichage du formulaire ou du document */} - {schoolFileTemplates[currentPage - 2].file === null ? ( - { - downloadTemplate(schoolFileTemplates[currentPage - 2].slug) - .then((data) => fetch(data)) - .then((response) => response.blob()) - .then((blob) => { - const file = new File( - [blob], - `${schoolFileTemplates[currentPage - 2].name}.pdf`, - { type: blob.type } - ); - const updateData = new FormData(); - updateData.append('file', file); - - return editRegistrationSchoolFileTemplates( - schoolFileTemplates[currentPage - 2].id, - updateData, - csrfToken - ); - }) - .then((data) => { - logger.debug('EDIT TEMPLATE : ', data); - setIsSignatureComplete(true); - }) - .catch((error) => { - logger.error('error editing template : ', error); - setIsSignatureComplete(false); - }); - }} - /> - ) : ( -