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";
|
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}
|
||||||
|
|||||||
@@ -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 });
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
4
todo.md
4
todo.md
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user