feat: Champ de recherche de l'élève [#16]

This commit is contained in:
N3WT DE COMPET
2025-05-20 20:22:58 +02:00
parent 56c223f3cc
commit eb7805e54e
7 changed files with 181 additions and 6 deletions

View File

@ -16,9 +16,11 @@ import { useRouter } from 'next/navigation';
import {
fetchStudents,
fetchStudentCompetencies,
searchStudents,
} from '@/app/actions/subscriptionAction';
import { useEstablishment } from '@/context/EstablishmentContext';
import { useClasses } from '@/context/ClassesContext';
import StudentInput from '@/components/Grades/StudentInput';
export default function Page() {
const router = useRouter();
@ -147,7 +149,19 @@ export default function Page() {
<h2 className="text-xl font-semibold mb-4">Sélectionner un élève</h2>
<div className="flex flex-col sm:flex-row sm:items-end gap-4">
<div className="flex-1">
<SelectChoice
<StudentInput
label="Recherche élève"
selectedStudent={
students.find((s) => s.id === formData.selectedStudent) || null
}
setSelectedStudent={(student) =>
handleChange('selectedStudent', student?.id || '')
}
searchStudents={searchStudents}
establishmentId={selectedEstablishmentId}
required
/>
{/* <SelectChoice
name="selectedStudent"
label="Élève"
placeHolder="Sélectionnez un élève"
@ -155,10 +169,12 @@ export default function Page() {
callback={(e) => handleChange('selectedStudent', e.target.value)}
choices={students.map((student) => ({
value: student.id,
label: `${student.last_name} ${student.first_name} - ${getNiveauLabel(student.level)} (${student.associated_class_name})`,
label: `${student.last_name} ${student.first_name} - ${getNiveauLabel(
student.level
)} (${student.associated_class_name})`,
}))}
required
/>
/> */}
</div>
<Button
text="Réaliser le bilan de compétences"

View File

@ -5,6 +5,7 @@ import {
BE_SUBSCRIPTION_LAST_GUARDIAN_ID_URL,
BE_SUBSCRIPTION_ABSENCES_URL,
BE_SUBSCRIPTION_STUDENT_COMPETENCIES_URL,
BE_SUBSCRIPTION_SEARCH_STUDENTS_URL,
} from '@/utils/Url';
import { CURRENT_YEAR_FILTER } from '@/utils/constants';
@ -128,6 +129,18 @@ export const archiveRegisterForm = (id) => {
.catch(errorHandler);
};
export const searchStudents = (establishmentId, query) => {
const url = `${BE_SUBSCRIPTION_SEARCH_STUDENTS_URL}/?establishment_id=${establishmentId}&q=${encodeURIComponent(query)}`;
return fetch(url, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
})
.then(requestResponseHandler)
.catch(errorHandler);
};
export const fetchStudents = (establishment, id = null, status = null) => {
let url;
if (id) {