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:
@@ -29,8 +29,8 @@ import { trpc } from "@/lib/trpc";
|
||||
import { toast } from "sonner";
|
||||
|
||||
interface FormateurComboboxProps {
|
||||
value?: string | null;
|
||||
onChange: (value: string) => void;
|
||||
value?: string | number | null;
|
||||
onChange: (value: number | null) => void;
|
||||
placeholder?: string;
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ export default function FormateurCombobox({
|
||||
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 (
|
||||
<>
|
||||
@@ -90,15 +90,15 @@ export default function FormateurCombobox({
|
||||
<CommandItem
|
||||
key={formateur.id}
|
||||
value={formateur.id.toString()}
|
||||
onSelect={(currentValue) => {
|
||||
onChange(currentValue === value ? "" : currentValue);
|
||||
onSelect={() => {
|
||||
onChange(value === formateur.id ? null : formateur.id);
|
||||
setOpen(false);
|
||||
}}
|
||||
>
|
||||
<Check
|
||||
className={cn(
|
||||
"mr-2 h-4 w-4",
|
||||
value === formateur.id.toString() ? "opacity-100" : "opacity-0"
|
||||
value === formateur.id ? "opacity-100" : "opacity-0"
|
||||
)}
|
||||
/>
|
||||
{formateur.nom}
|
||||
|
||||
@@ -49,7 +49,7 @@ export default function AdminSequenceInscrits() {
|
||||
const [filterFonction, setFilterFonction] = useState<string>("all");
|
||||
const [sortBy, setSortBy] = useState<"date" | "nom">("date");
|
||||
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 { data: sequence, isLoading: loadingSequence } = trpc.sequences.getById.useQuery({ id: sequenceId });
|
||||
|
||||
@@ -38,10 +38,11 @@ export default function AdminSequences() {
|
||||
formationId: "",
|
||||
nom: "",
|
||||
lieu: "",
|
||||
publicCible: "autre" as "directeur" | "chef_service" | "autre",
|
||||
publicCible: "autre" as "directeur" | "chef_service" | "autre" | "tous",
|
||||
capaciteMax: "12",
|
||||
dateBlocage: "",
|
||||
statut: "ouverte" as "ouverte" | "bloquee" | "terminee",
|
||||
formateur: null as number | null,
|
||||
dates: [
|
||||
{ dateDebut: "", dateFin: "", ordre: 1 }
|
||||
] as DateFormation[],
|
||||
@@ -95,6 +96,7 @@ export default function AdminSequences() {
|
||||
capaciteMax: "12",
|
||||
dateBlocage: "",
|
||||
statut: "ouverte",
|
||||
formateur: null,
|
||||
dates: [{ dateDebut: "", dateFin: "", ordre: 1 }],
|
||||
});
|
||||
};
|
||||
@@ -183,7 +185,7 @@ export default function AdminSequences() {
|
||||
capaciteMax: parseInt(formData.capaciteMax),
|
||||
dateBlocage: convertLocalToUTC(formData.dateBlocage),
|
||||
statut: formData.statut,
|
||||
formateurId: formData.formateur ? parseInt(formData.formateur) : null,
|
||||
formateurId: formData.formateur,
|
||||
dates: formData.dates.map(d => ({
|
||||
...d,
|
||||
dateDebut: convertLocalToUTC(d.dateDebut),
|
||||
|
||||
@@ -113,8 +113,8 @@ export default function QuestionnaireReponse() {
|
||||
{APP_LOGO && (
|
||||
<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>
|
||||
{data.questionnaire.description && (
|
||||
<h1 className="text-3xl font-bold mb-2">{data.questionnaire?.nom || 'Questionnaire'}</h1>
|
||||
{data.questionnaire?.description && (
|
||||
<p className="text-muted-foreground">{data.questionnaire.description}</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
4
todo.md
4
todo.md
@@ -632,3 +632,7 @@
|
||||
|
||||
## Bug à corriger
|
||||
- [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)
|
||||
|
||||
Reference in New Issue
Block a user