Checkpoint: Corrections d'affichage du nom de formation dans le calendrier :

- Création de getSequencesWithFormation() pour récupérer les informations de formation
- Mise à jour de la procédure sequences.list pour utiliser la nouvelle fonction
- Correction de AdminCalendrier.tsx pour utiliser formation.nom au lieu de formation.titre
- Le nom de la formation s'affiche maintenant correctement dans le calendrier et dans le dialog de détails
- Vérification que le placeholder du FormateurCombobox est correct
This commit is contained in:
Manus Sandbox
2025-11-19 12:17:52 -05:00
parent 6264693dff
commit 4a48164461
4 changed files with 38 additions and 3 deletions

View File

@@ -169,7 +169,7 @@ export default function AdminCalendrier() {
className="w-full text-left text-xs p-1.5 rounded bg-blue-100 hover:bg-blue-200 text-blue-800 space-y-0.5" className="w-full text-left text-xs p-1.5 rounded bg-blue-100 hover:bg-blue-200 text-blue-800 space-y-0.5"
> >
<div className="font-medium truncate">{seq.nom}</div> <div className="font-medium truncate">{seq.nom}</div>
<div className="text-[10px] font-semibold opacity-90 truncate">{seq.formation?.titre || "Sans formation"}</div> <div className="text-[10px] font-semibold opacity-90 truncate">{seq.formation?.nom || "Sans formation"}</div>
<div className="text-[10px] opacity-80 truncate"> <div className="text-[10px] opacity-80 truncate">
{seq.lieu} {seq.formateur && `${seq.formateur}`} {seq.lieu} {seq.formateur && `${seq.formateur}`}
</div> </div>
@@ -200,7 +200,7 @@ export default function AdminCalendrier() {
<div className="space-y-4"> <div className="space-y-4">
<div> <div>
<h3 className="font-semibold text-lg"> <h3 className="font-semibold text-lg">
{selectedSequence.formation?.titre || "Sans titre"} {selectedSequence.formation?.nom || "Sans titre"}
</h3> </h3>
<p className="text-sm text-muted-foreground"> <p className="text-sm text-muted-foreground">
{selectedSequence.formation?.description || "Aucune description"} {selectedSequence.formation?.description || "Aucune description"}

View File

@@ -177,6 +177,24 @@ export async function getSequences() {
return await db.select().from(sequences); return await db.select().from(sequences);
} }
export async function getSequencesWithFormation() {
const db = await getDb();
if (!db) return [];
const seqs = await db.select().from(sequences);
// Récupérer les informations de formation pour chaque séquence
return await Promise.all(
seqs.map(async (seq) => {
const formation = await db.select().from(formations).where(eq(formations.id, seq.formationId)).limit(1);
return {
...seq,
formation: formation.length > 0 ? { id: formation[0].id, nom: formation[0].nom } : null,
};
})
);
}
export async function getSequenceById(id: number): Promise<Sequence | undefined> { export async function getSequenceById(id: number): Promise<Sequence | undefined> {
const db = await getDb(); const db = await getDb();
if (!db) return undefined; if (!db) return undefined;

View File

@@ -119,7 +119,7 @@ export const appRouter = router({
// ===== SÉQUENCES ===== // ===== SÉQUENCES =====
sequences: router({ sequences: router({
list: adminProcedure.query(async () => { list: adminProcedure.query(async () => {
const seqs = await db.getSequences(); const seqs = await db.getSequencesWithFormation();
// Récupérer les dates et le nombre d'inscrits pour chaque séquence // Récupérer les dates et le nombre d'inscrits pour chaque séquence
const sequencesAvecDates = await Promise.all( const sequencesAvecDates = await Promise.all(
seqs.map(async (seq) => { seqs.map(async (seq) => {

17
todo.md
View File

@@ -309,3 +309,20 @@
- [x] Ajouter le champ formateur dans le formulaire "Nouvelle séquence" - [x] Ajouter le champ formateur dans le formulaire "Nouvelle séquence"
- [x] Modifier le placeholder du formateur : "Sélectionner un formateur" (déjà correct par défaut) - [x] Modifier le placeholder du formateur : "Sélectionner un formateur" (déjà correct par défaut)
- [x] Afficher le nom de la séquence ET le nom de la formation dans le calendrier - [x] Afficher le nom de la séquence ET le nom de la formation dans le calendrier
## Vérification des trois corrections
- [ ] Vérifier que le champ formateur apparaît bien dans le formulaire "Nouvelle séquence"
- [ ] Vérifier le texte du placeholder du formateur
- [ ] Vérifier que le nom de la séquence ET le nom de la formation apparaissent dans le calendrier
- [ ] Corriger les problèmes trouvés
## Corrections affichage nom de formation dans calendrier
- [x] Modifier getSequences() pour récupérer les informations de formation via jointure
- [x] Créer getSequencesWithFormation() pour éviter les conflits avec le spread operator
- [x] Mettre à jour la procédure sequences.list pour utiliser getSequencesWithFormation()
- [x] Corriger AdminCalendrier.tsx pour utiliser formation.nom au lieu de formation.titre
- [x] Vérifier que le placeholder du FormateurCombobox est correct (sans "(optionnel)")
- [x] Tester l'affichage du nom de formation dans le calendrier
- [x] Tester l'affichage du nom de formation dans le dialog de détails