true message

This commit is contained in:
Manus Sandbox
2025-11-19 10:33:48 -05:00
parent 54cf4297bf
commit 2283e84b54
42 changed files with 38 additions and 8559 deletions

View File

@@ -1,7 +1,5 @@
import { useState, useMemo } from "react";
import DashboardLayout from "@/components/DashboardLayout";
import { FormateurCombobox } from "@/components/FormateurCombobox";
import { CapacityProgressBar } from "@/components/CapacityProgressBar";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
@@ -36,8 +34,7 @@ export default function AdminSequences() {
formationId: "",
nom: "",
lieu: "",
publicCible: "autre" as "directeur" | "chef_service" | "tous" | "autre",
formateur: "",
publicCible: "autre" as "directeur" | "chef_service" | "autre",
capaciteMax: "12",
dateBlocage: "",
statut: "ouverte" as "ouverte" | "bloquee" | "terminee",
@@ -91,7 +88,6 @@ export default function AdminSequences() {
nom: "",
lieu: "",
publicCible: "autre",
formateur: "",
capaciteMax: "12",
dateBlocage: "",
statut: "ouverte",
@@ -143,7 +139,6 @@ export default function AdminSequences() {
nom: sequence.nom || "",
lieu: sequence.lieu || "",
publicCible: sequence.publicCible || "autre",
formateur: sequence.formateur || "",
capaciteMax: sequence.capaciteMax?.toString() || "12",
dateBlocage: safeFormatDate(sequence.dateBlocage),
statut: sequence.statut || "ouverte",
@@ -169,7 +164,6 @@ export default function AdminSequences() {
nom: formData.nom,
lieu: formData.lieu,
publicCible: formData.publicCible,
formateur: formData.formateur || undefined,
capaciteMax: parseInt(formData.capaciteMax),
dateBlocage: formData.dateBlocage,
statut: formData.statut,
@@ -298,7 +292,6 @@ export default function AdminSequences() {
const colors = {
directeur: "bg-blue-100 text-blue-800",
chef_service: "bg-green-100 text-green-800",
tous: "bg-purple-100 text-purple-800",
autre: "bg-gray-100 text-gray-800",
};
return colors[publicCible as keyof typeof colors] || colors.autre;
@@ -308,7 +301,6 @@ export default function AdminSequences() {
const labels = {
directeur: "Directeur",
chef_service: "Chef de service",
tous: "Tous",
autre: "Autre",
};
return labels[publicCible as keyof typeof labels] || "Autre";
@@ -331,7 +323,7 @@ export default function AdminSequences() {
Nouvelle Séquence
</Button>
</DialogTrigger>
<DialogContent className="max-w-4xl max-h-[90vh] overflow-y-auto">
<DialogContent className="max-w-3xl max-h-[90vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>Créer une nouvelle séquence</DialogTitle>
<DialogDescription>
@@ -386,7 +378,7 @@ export default function AdminSequences() {
<Label htmlFor="publicCible">Public cible *</Label>
<Select
value={formData.publicCible}
onValueChange={(value: "directeur" | "chef_service" | "tous" | "autre") => setFormData({ ...formData, publicCible: value })}
onValueChange={(value: "directeur" | "chef_service" | "autre") => setFormData({ ...formData, publicCible: value })}
>
<SelectTrigger id="publicCible">
<SelectValue placeholder="Sélectionner le public cible" />
@@ -394,22 +386,10 @@ export default function AdminSequences() {
<SelectContent>
<SelectItem value="directeur">Directeur</SelectItem>
<SelectItem value="chef_service">Chef de service</SelectItem>
<SelectItem value="tous">Tous</SelectItem>
<SelectItem value="autre">Autre</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="formateur">Formateur</Label>
<FormateurCombobox
value={formData.formateur}
onChange={(value) => setFormData({ ...formData, formateur: value })}
placeholder="Sélectionner un formateur (optionnel)"
/>
</div>
<div className="space-y-2">
<Label htmlFor="capaciteMax">Capacité maximale *</Label>
@@ -637,7 +617,6 @@ export default function AdminSequences() {
<TableHead>Dates</TableHead>
<TableHead>Lieu</TableHead>
<TableHead>Public cible</TableHead>
<TableHead>Formateur</TableHead>
<TableHead>Capacité</TableHead>
<TableHead>Statut</TableHead>
<TableHead className="text-right">Actions</TableHead>
@@ -664,13 +643,7 @@ export default function AdminSequences() {
{getPublicCibleLabel(sequence.publicCible)}
</span>
</TableCell>
<TableCell className="max-w-xs truncate">{sequence.formateur || "-"}</TableCell>
<TableCell>
<CapacityProgressBar
current={sequence.nbInscrits || 0}
max={sequence.capaciteMax}
/>
</TableCell>
<TableCell>{sequence.capaciteMax}</TableCell>
<TableCell>
<span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatutBadge(sequence.statut)}`}>
{sequence.statut}
@@ -712,7 +685,7 @@ export default function AdminSequences() {
{/* Dialog d'édition */}
<Dialog open={isEditOpen} onOpenChange={setIsEditOpen}>
<DialogContent className="max-w-4xl max-h-[90vh] overflow-y-auto">
<DialogContent className="max-w-3xl max-h-[90vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>Modifier la séquence</DialogTitle>
<DialogDescription>
@@ -761,6 +734,21 @@ export default function AdminSequences() {
/>
</div>
<div className="space-y-2">
<Label htmlFor="edit-capaciteMax">Capacité maximale *</Label>
<Input
id="edit-capaciteMax"
type="number"
min="1"
max="50"
value={formData.capaciteMax}
onChange={(e) => setFormData({ ...formData, capaciteMax: e.target.value })}
required
/>
</div>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="edit-publicCible">Public cible *</Label>
<Select
@@ -778,9 +766,7 @@ export default function AdminSequences() {
</SelectContent>
</Select>
</div>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2">
<Label htmlFor="edit-formateur">Formateur</Label>
<FormateurCombobox
@@ -789,19 +775,6 @@ export default function AdminSequences() {
placeholder="Sélectionner un formateur (optionnel)"
/>
</div>
<div className="space-y-2">
<Label htmlFor="edit-capaciteMax">Capacité maximale *</Label>
<Input
id="edit-capaciteMax"
type="number"
min="1"
max="50"
value={formData.capaciteMax}
onChange={(e) => setFormData({ ...formData, capaciteMax: e.target.value })}
required
/>
</div>
</div>
<div className="grid grid-cols-2 gap-4">