feat: gestion des no data dans les table [#33]

This commit is contained in:
N3WT DE COMPET
2025-05-17 14:35:33 +02:00
parent 3990d75e52
commit 2888f8dcce
14 changed files with 258 additions and 103 deletions

View File

@ -17,6 +17,7 @@ import { dissociateGuardian } from '@/app/actions/subscriptionAction';
import { useCsrfToken } from '@/context/CsrfContext';
import DjangoCSRFToken from '@/components/DjangoCSRFToken';
import logger from '@/utils/logger';
import AlertMessage from '@/components/AlertMessage';
const roleTypeToLabel = (roleType) => {
switch (roleType) {
@ -191,7 +192,7 @@ export default function Page() {
setProfileRolesParent(profilesRoles);
}
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
count === 0 ? count : Math.ceil(count / page_size);
setTotalProfilesParent(count);
setTotalProfilesParentPages(calculatedTotalPages);
}
@ -204,7 +205,7 @@ export default function Page() {
setProfileRolesSchool(profilesRoles);
}
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
count === 0 ? count : Math.ceil(count / page_size);
setTotalProfilesSchool(count);
setTotalProfilesSchoolPages(calculatedTotalPages);
}
@ -505,7 +506,7 @@ export default function Page() {
id: 'parent',
label: 'Parents',
content: (
<div className="h-full overflow-y-auto">
<div className="h-full overflow-y-auto p-4">
<Table
key={`parent-${currentProfilesParentPage}`}
data={profileRolesParent}
@ -514,6 +515,13 @@ export default function Page() {
currentPage={currentProfilesParentPage}
totalPages={totalProfilesParentPages}
onPageChange={handlePageChange}
emptyMessage={
<AlertMessage
type="info"
title="Aucun profil PARENT enregistré"
message="Un profil Parent est ajouté lors de la création d'un nouveau dossier d'inscription."
/>
}
/>
</div>
),
@ -522,7 +530,7 @@ export default function Page() {
id: 'school',
label: 'École',
content: (
<div className="h-full overflow-y-auto">
<div className="h-full overflow-y-auto p-4">
<Table
key={`school-${currentProfilesSchoolPage}`}
data={profileRolesSchool}
@ -531,6 +539,13 @@ export default function Page() {
currentPage={currentProfilesSchoolPage}
totalPages={totalProfilesSchoolPages}
onPageChange={handlePageChange}
emptyMessage={
<AlertMessage
type="info"
title="Aucun profil ECOLE enregistré"
message="Un profil ECOLE est ajouté lors de la création d'un nouvel enseignant."
/>
}
/>
</div>
),

View File

@ -14,7 +14,6 @@ import {
fetchSpecialities,
fetchTeachers,
fetchClasses,
fetchSchedules,
fetchRegistrationDiscounts,
fetchTuitionDiscounts,
fetchRegistrationFees,
@ -267,69 +266,77 @@ export default function Page() {
id: 'Configuration',
label: 'Classes',
content: (
<StructureManagement
specialities={specialities}
setSpecialities={setSpecialities}
teachers={teachers}
setTeachers={setTeachers}
classes={classes}
setClasses={setClasses}
profiles={profiles}
handleCreate={handleCreate}
handleEdit={handleEdit}
handleDelete={handleDelete}
/>
<div className="h-full overflow-y-auto p-4">
<StructureManagement
specialities={specialities}
setSpecialities={setSpecialities}
teachers={teachers}
setTeachers={setTeachers}
classes={classes}
setClasses={setClasses}
profiles={profiles}
handleCreate={handleCreate}
handleEdit={handleEdit}
handleDelete={handleDelete}
/>
</div>
),
},
{
id: 'Schedule',
label: 'Emploi du temps',
content: (
<ClassesProvider>
<ScheduleManagement
handleUpdatePlanning={handleUpdatePlanning}
classes={classes}
specialities={specialities}
teachers={teachers}
/>
</ClassesProvider>
<div className="h-full overflow-y-auto p-4">
<ClassesProvider>
<ScheduleManagement
handleUpdatePlanning={handleUpdatePlanning}
classes={classes}
specialities={specialities}
teachers={teachers}
/>
</ClassesProvider>
</div>
),
},
{
id: 'Fees',
label: 'Tarifs',
content: (
<FeesManagement
registrationDiscounts={registrationDiscounts}
setRegistrationDiscounts={setRegistrationDiscounts}
tuitionDiscounts={tuitionDiscounts}
setTuitionDiscounts={setTuitionDiscounts}
registrationFees={registrationFees}
setRegistrationFees={setRegistrationFees}
tuitionFees={tuitionFees}
setTuitionFees={setTuitionFees}
registrationPaymentPlans={registrationPaymentPlans}
setRegistrationPaymentPlans={setRegistrationPaymentPlans}
tuitionPaymentPlans={tuitionPaymentPlans}
setTuitionPaymentPlans={setTuitionPaymentPlans}
registrationPaymentModes={registrationPaymentModes}
setRegistrationPaymentModes={setRegistrationPaymentModes}
tuitionPaymentModes={tuitionPaymentModes}
setTuitionPaymentModes={setTuitionPaymentModes}
handleCreate={handleCreate}
handleEdit={handleEdit}
handleDelete={handleDelete}
/>
<div className="h-full overflow-y-auto p-4">
<FeesManagement
registrationDiscounts={registrationDiscounts}
setRegistrationDiscounts={setRegistrationDiscounts}
tuitionDiscounts={tuitionDiscounts}
setTuitionDiscounts={setTuitionDiscounts}
registrationFees={registrationFees}
setRegistrationFees={setRegistrationFees}
tuitionFees={tuitionFees}
setTuitionFees={setTuitionFees}
registrationPaymentPlans={registrationPaymentPlans}
setRegistrationPaymentPlans={setRegistrationPaymentPlans}
tuitionPaymentPlans={tuitionPaymentPlans}
setTuitionPaymentPlans={setTuitionPaymentPlans}
registrationPaymentModes={registrationPaymentModes}
setRegistrationPaymentModes={setRegistrationPaymentModes}
tuitionPaymentModes={tuitionPaymentModes}
setTuitionPaymentModes={setTuitionPaymentModes}
handleCreate={handleCreate}
handleEdit={handleEdit}
handleDelete={handleDelete}
/>
</div>
),
},
{
id: 'Files',
label: 'Documents',
content: (
<FilesGroupsManagement
csrfToken={csrfToken}
selectedEstablishmentId={selectedEstablishmentId}
/>
<div className="h-full overflow-y-auto p-4">
<FilesGroupsManagement
csrfToken={csrfToken}
selectedEstablishmentId={selectedEstablishmentId}
/>
</div>
),
},
];

View File

@ -51,6 +51,7 @@ import {
NEXT_YEAR_FILTER,
HISTORICAL_FILTER,
} from '@/utils/constants';
import AlertMessage from '@/components/AlertMessage';
export default function Page({ params: { locale } }) {
const t = useTranslations('subscriptions');
@ -136,7 +137,7 @@ export default function Page({ params: { locale } }) {
setRegistrationFormsDataCurrentYear(registerForms);
}
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
count === 0 ? count : Math.ceil(count / page_size);
setTotalCurrentYear(count);
setTotalCurrentSchoolYearPages(calculatedTotalPages);
}
@ -156,7 +157,7 @@ export default function Page({ params: { locale } }) {
setRegistrationFormsDataNextYear(registerForms);
}
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
count === 0 ? count : Math.ceil(count / page_size);
setTotalNextYear(count);
setTotalNextSchoolYearPages(calculatedTotalPages);
}
@ -177,7 +178,7 @@ export default function Page({ params: { locale } }) {
}
const calculatedTotalPages =
count === 0 ? 1 : Math.ceil(count / page_size);
count === 0 ? count : Math.ceil(count / page_size);
setTotalHistorical(count);
setTotalHistoricalPages(calculatedTotalPages);
}
@ -692,6 +693,33 @@ export default function Page({ params: { locale } }) {
},
];
let emptyMessage;
if (activeTab === CURRENT_YEAR_FILTER) {
emptyMessage = (
<AlertMessage
type="warning"
title="Aucun dossier d'inscription pour l'année en cours"
message="Veuillez procéder à la création d'un nouveau dossier d'inscription pour l'année scolaire en cours."
/>
);
} else if (activeTab === NEXT_YEAR_FILTER) {
emptyMessage = (
<AlertMessage
type="info"
title="Aucun dossier d'inscription pour l'année prochaine"
message="Aucun dossier n'a encore été créé pour la prochaine année scolaire."
/>
);
} else if (activeTab === HISTORICAL_FILTER) {
emptyMessage = (
<AlertMessage
type="info"
title="Aucun dossier d'inscription historique"
message="Aucun dossier archivé n'est disponible pour les années précédentes."
/>
);
}
if (isLoading) {
return <Loader />;
}
@ -802,6 +830,7 @@ export default function Page({ params: { locale } }) {
: totalHistoricalPages
}
onPageChange={handlePageChange}
emptyMessage={emptyMessage}
/>
</div>
</React.Fragment>