diff --git a/src/App.js b/src/App.js
index 496f951..edbceb2 100644
--- a/src/App.js
+++ b/src/App.js
@@ -39,6 +39,7 @@ function App() {
const PageCandidatureConseiller = lazy(() => import('./views/candidature-conseiller/PageCandidatureConseiller'));
const PageCandidatureStructure = lazy(() => import('./views/candidature-structure/PageCandidatureStructure'));
const PageCandidatureCoordinateur = lazy(() => import('./views/candidature-coordinateur/PageCandidatureCoordinateur'));
+ const PageCandidatureValidee = lazy(() => import('./views/candidature-validee/PageCandidatureValidee'));
return (
@@ -49,6 +50,7 @@ function App() {
}/>
}/>
}/>
+
}/>
}/>
}/>
}/>
diff --git a/src/components/commun/Alert.jsx b/src/components/commun/Alert.jsx
new file mode 100644
index 0000000..017e7c1
--- /dev/null
+++ b/src/components/commun/Alert.jsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+export default function Alert({ children, titre }) {
+ return (
+
+ );
+}
+
+Alert.propTypes = {
+ children: PropTypes.node,
+ titre: PropTypes.string,
+};
+
diff --git a/src/components/commun/BoutonRadio.jsx b/src/components/commun/BoutonRadio.jsx
index e8f0894..d6d4a10 100644
--- a/src/components/commun/BoutonRadio.jsx
+++ b/src/components/commun/BoutonRadio.jsx
@@ -5,7 +5,7 @@ export default function BoutonRadio({ children, id, nomGroupe }) {
return (
-
+
diff --git a/src/components/commun/Datepicker.jsx b/src/components/commun/Datepicker.jsx
index 3858950..58542bd 100644
--- a/src/components/commun/Datepicker.jsx
+++ b/src/components/commun/Datepicker.jsx
@@ -7,7 +7,7 @@ export default function Datepicker({ children, id, isRequired = true, onChange,
-
+
);
}
diff --git a/src/components/commun/Input.jsx b/src/components/commun/Input.jsx
index 2b3badd..a69a445 100644
--- a/src/components/commun/Input.jsx
+++ b/src/components/commun/Input.jsx
@@ -6,7 +6,17 @@ export default function Input({ children, id, isRequired = true, type = 'text',
);
diff --git a/src/views/candidature-conseiller/CandidatureConseiller.jsx b/src/views/candidature-conseiller/CandidatureConseiller.jsx
index 32ff2ad..8483cf7 100644
--- a/src/views/candidature-conseiller/CandidatureConseiller.jsx
+++ b/src/views/candidature-conseiller/CandidatureConseiller.jsx
@@ -6,6 +6,7 @@ import Disponibilite from './Disponibilite';
import Motivation from './Motivation';
import EnResume from './EnResume';
import { useScrollToSection } from '../../hooks/useScrollToSection';
+import { useNavigate } from 'react-router-dom';
import '@gouvfr/dsfr/dist/component/form/form.min.css';
import '@gouvfr/dsfr/dist/component/input/input.min.css';
@@ -14,27 +15,45 @@ import '@gouvfr/dsfr/dist/component/radio/radio.min.css';
import '@gouvfr/dsfr/dist/component/badge/badge.min.css';
import '@gouvfr/dsfr/dist/component/notice/notice.min.css';
import '@gouvfr/dsfr/dist/component/sidemenu/sidemenu.min.css';
+import '@gouvfr/dsfr/dist/component/alert/alert.min.css';
import './CandidatureConseiller.css';
import { useApiAdmin } from './useApiAdmin';
+import Alert from '../../components/commun/Alert';
export default function CandidatureConseiller() {
const [dateDisponibilite, setDateDisponibilite] = useState('');
const [isSituationValid, setIsSituationValid] = useState(true);
- const { creerCandidatureConseiller } = useApiAdmin();
+ const [validationError, setValidationError] = useState();
+ const { buildConseillerData, creerCandidatureConseiller } = useApiAdmin();
+ const navigate = useNavigate();
useScrollToSection();
- const validerLaCandidature = event => {
+ const estSituationRemplie = formData => {
+ const demandeurEmploi = formData.get('demandeurEmploi');
+ const enEmploi = formData.get('enEmploi');
+ const enFormation = formData.get('enFormation');
+ const diplome = formData.get('diplome');
+
+ return demandeurEmploi || enEmploi || enFormation || diplome;
+ };
+
+ const validerLaCandidature = async event => {
event.preventDefault();
const formData = new FormData(event.currentTarget);
- const situations = formData.get('situations');
- if (situations === null) {
+ if (!estSituationRemplie(formData)) {
setIsSituationValid(false);
document.getElementById('situation-et-experience').scrollIntoView();
} else {
- event.currentTarget.submit();
- creerCandidatureConseiller();
+ const conseillerData = buildConseillerData(formData);
+ const resultatCreation = await creerCandidatureConseiller(conseillerData);
+ if (resultatCreation.status >= 400) {
+ const error = await resultatCreation.json();
+ setValidationError(error.message);
+ } else {
+ navigate('/candidature-validee');
+ }
}
};
@@ -47,6 +66,9 @@ export default function CandidatureConseiller() {
Je veux devenir conseiller numérique
Les champs avec * sont obligatoires.
+ {validationError &&
+ {validationError}
+ }