chore: Initial Commit

feat: Gestion des inscriptions [#1]
feat(frontend): Création des vues pour le paramétrage de l'école [#2]
feat: Gestion du login [#6]
fix: Correction lors de la migration des modèle [#8]
feat: Révision du menu principal [#9]
feat: Ajout d'un footer [#10]
feat: Création des dockers compose pour les environnements de
développement et de production [#12]
doc(ci): Mise en place de Husky et d'un suivi de version automatique [#14]
This commit is contained in:
Luc SORIGNET
2024-11-18 10:02:58 +01:00
committed by N3WT DE COMPET
commit af0cd1c840
228 changed files with 22694 additions and 0 deletions

View File

@ -0,0 +1,47 @@
import React from 'react';
import {useTranslations} from 'next-intl';
const Pagination = ({ currentPage, totalPages, onPageChange }) => {
const t = useTranslations('pagination');
const pages = Array.from({ length: totalPages }, (_, i) => i + 1);
return (
<div className="px-6 py-4 border-t border-gray-200 flex items-center justify-between">
<div className="text-sm text-gray-600">{t('page')} {currentPage} {t('of')} {pages.length}</div>
<div className="flex items-center gap-2">
{currentPage > 1 && (
<PaginationButton text={t('previous')} onClick={() => onPageChange(currentPage - 1)}/>
)}
{pages.map((page) => (
<PaginationNumber
key={page}
number={page}
active={page === currentPage}
onClick={() => onPageChange(page)}
/>
))}
{currentPage < totalPages && (
<PaginationButton text={t('next')} onClick={() => onPageChange(currentPage + 1)} />
)}
</div>
</div>
);
};
const PaginationButton = ({ text , onClick}) => (
<button className="px-3 py-1 text-sm text-gray-600 hover:bg-gray-50 rounded" onClick={onClick}>
{text}
</button>
);
const PaginationNumber = ({ number, active , onClick}) => (
<button className={`w-8 h-8 flex items-center justify-center rounded ${
active ? 'bg-emerald-500 text-white' : 'text-gray-600 hover:bg-gray-50'
}`} onClick={onClick}>
{number}
</button>
);
export default Pagination;