Checkpoint: Corrections des erreurs TypeScript bloquantes pour la publication :

- Ajout du champ formateur (number | null) dans le type FormData de AdminSequences.tsx
- Ajout du type "tous" dans publicCible pour supporter toutes les valeurs possibles
- Correction de FormateurCombobox pour accepter number | null au lieu de string
- Correction des erreurs null dans QuestionnaireReponse.tsx avec optional chaining
- Correction du type previewType dans AdminSequenceInscrits.tsx pour inclure "rappel_j1"
- Build de production testé et fonctionnel (✓ built in 14.69s)

Les quelques avertissements TypeScript restants (11) ne bloquent pas le build de production. L'application peut maintenant être publiée.
This commit is contained in:
Manus
2026-01-09 11:45:27 -05:00
parent e9023ed83a
commit f9aa8f7838
5 changed files with 17 additions and 11 deletions

View File

@@ -29,8 +29,8 @@ import { trpc } from "@/lib/trpc";
import { toast } from "sonner"; import { toast } from "sonner";
interface FormateurComboboxProps { interface FormateurComboboxProps {
value?: string | null; value?: string | number | null;
onChange: (value: string) => void; onChange: (value: number | null) => void;
placeholder?: string; placeholder?: string;
} }
@@ -64,7 +64,7 @@ export default function FormateurCombobox({
createMutation.mutate({ nom: newFormateurNom.trim() }); createMutation.mutate({ nom: newFormateurNom.trim() });
}; };
const selectedFormateur = formateurs?.find((f) => f.id.toString() === value); const selectedFormateur = formateurs?.find((f) => f.id === value || f.id.toString() === value?.toString());
return ( return (
<> <>
@@ -90,15 +90,15 @@ export default function FormateurCombobox({
<CommandItem <CommandItem
key={formateur.id} key={formateur.id}
value={formateur.id.toString()} value={formateur.id.toString()}
onSelect={(currentValue) => { onSelect={() => {
onChange(currentValue === value ? "" : currentValue); onChange(value === formateur.id ? null : formateur.id);
setOpen(false); setOpen(false);
}} }}
> >
<Check <Check
className={cn( className={cn(
"mr-2 h-4 w-4", "mr-2 h-4 w-4",
value === formateur.id.toString() ? "opacity-100" : "opacity-0" value === formateur.id ? "opacity-100" : "opacity-0"
)} )}
/> />
{formateur.nom} {formateur.nom}

View File

@@ -49,7 +49,7 @@ export default function AdminSequenceInscrits() {
const [filterFonction, setFilterFonction] = useState<string>("all"); const [filterFonction, setFilterFonction] = useState<string>("all");
const [sortBy, setSortBy] = useState<"date" | "nom">("date"); const [sortBy, setSortBy] = useState<"date" | "nom">("date");
const [showPreviewModal, setShowPreviewModal] = useState(false); const [showPreviewModal, setShowPreviewModal] = useState(false);
const [previewType, setPreviewType] = useState<"teaser" | "rappel">("teaser"); const [previewType, setPreviewType] = useState<"teaser" | "rappel" | "rappel_j1">("teaser");
const utils = trpc.useUtils(); const utils = trpc.useUtils();
const { data: sequence, isLoading: loadingSequence } = trpc.sequences.getById.useQuery({ id: sequenceId }); const { data: sequence, isLoading: loadingSequence } = trpc.sequences.getById.useQuery({ id: sequenceId });

View File

@@ -38,10 +38,11 @@ export default function AdminSequences() {
formationId: "", formationId: "",
nom: "", nom: "",
lieu: "", lieu: "",
publicCible: "autre" as "directeur" | "chef_service" | "autre", publicCible: "autre" as "directeur" | "chef_service" | "autre" | "tous",
capaciteMax: "12", capaciteMax: "12",
dateBlocage: "", dateBlocage: "",
statut: "ouverte" as "ouverte" | "bloquee" | "terminee", statut: "ouverte" as "ouverte" | "bloquee" | "terminee",
formateur: null as number | null,
dates: [ dates: [
{ dateDebut: "", dateFin: "", ordre: 1 } { dateDebut: "", dateFin: "", ordre: 1 }
] as DateFormation[], ] as DateFormation[],
@@ -95,6 +96,7 @@ export default function AdminSequences() {
capaciteMax: "12", capaciteMax: "12",
dateBlocage: "", dateBlocage: "",
statut: "ouverte", statut: "ouverte",
formateur: null,
dates: [{ dateDebut: "", dateFin: "", ordre: 1 }], dates: [{ dateDebut: "", dateFin: "", ordre: 1 }],
}); });
}; };
@@ -183,7 +185,7 @@ export default function AdminSequences() {
capaciteMax: parseInt(formData.capaciteMax), capaciteMax: parseInt(formData.capaciteMax),
dateBlocage: convertLocalToUTC(formData.dateBlocage), dateBlocage: convertLocalToUTC(formData.dateBlocage),
statut: formData.statut, statut: formData.statut,
formateurId: formData.formateur ? parseInt(formData.formateur) : null, formateurId: formData.formateur,
dates: formData.dates.map(d => ({ dates: formData.dates.map(d => ({
...d, ...d,
dateDebut: convertLocalToUTC(d.dateDebut), dateDebut: convertLocalToUTC(d.dateDebut),

View File

@@ -113,8 +113,8 @@ export default function QuestionnaireReponse() {
{APP_LOGO && ( {APP_LOGO && (
<img src={APP_LOGO} alt={APP_TITLE} className="h-16 mx-auto mb-4" /> <img src={APP_LOGO} alt={APP_TITLE} className="h-16 mx-auto mb-4" />
)} )}
<h1 className="text-3xl font-bold mb-2">{data.questionnaire.nom}</h1> <h1 className="text-3xl font-bold mb-2">{data.questionnaire?.nom || 'Questionnaire'}</h1>
{data.questionnaire.description && ( {data.questionnaire?.description && (
<p className="text-muted-foreground">{data.questionnaire.description}</p> <p className="text-muted-foreground">{data.questionnaire.description}</p>
)} )}
</div> </div>

View File

@@ -632,3 +632,7 @@
## Bug à corriger ## Bug à corriger
- [x] Corriger l'affichage du menu latéral pour les formateurs (menu invisible actuellement) - [x] Corriger l'affichage du menu latéral pour les formateurs (menu invisible actuellement)
## Erreurs TypeScript à corriger pour publication
- [x] Corriger l'erreur dans AdminSequences.tsx (propriété formateur manquante)
- [x] Corriger les erreurs dans QuestionnaireReponse.tsx (questionnaire possibly null)