Checkpoint: ✅ Ajout d'une boîte de dialogue de confirmation avant l'envoi de test des rappels
✅ Correction de la structure de la table logsrappels pour correspondre au VPS - Modification de la colonne statut: ENUM('succes','echec') au lieu de ENUM('success','failed') - Modification de la colonne typeEnvoi: ENUM('automatique','test') - Suppression des colonnes en trop (emailDestinataire, typeRappel, dateSequence, createdAt) ✅ Les logs de rappels s'enregistrent maintenant correctement dans la base de données
This commit is contained in:
@@ -33,6 +33,8 @@ export default function AdminSequences() {
|
||||
const [filterPublicCible, setFilterPublicCible] = useState<string>("all");
|
||||
const [sortBy, setSortBy] = useState<"date" | "lieu" | "capacite">("date");
|
||||
const [isCompactView, setIsCompactView] = useState(true);
|
||||
const [isConfirmTestOpen, setIsConfirmTestOpen] = useState(false);
|
||||
const [sequenceToTest, setSequenceToTest] = useState<number | null>(null);
|
||||
|
||||
const [formData, setFormData] = useState({
|
||||
formationId: "",
|
||||
@@ -90,12 +92,31 @@ export default function AdminSequences() {
|
||||
const testerRappelMutation = trpc.rappels.testerRappel.useMutation({
|
||||
onSuccess: () => {
|
||||
toast.success("Email de test envoyé avec succès");
|
||||
setIsConfirmTestOpen(false);
|
||||
setSequenceToTest(null);
|
||||
},
|
||||
onError: (error) => {
|
||||
toast.error(`Erreur lors de l'envoi du test : ${error.message}`);
|
||||
setIsConfirmTestOpen(false);
|
||||
setSequenceToTest(null);
|
||||
},
|
||||
});
|
||||
|
||||
const handleTestRappel = (sequenceId: number, sequence: any) => {
|
||||
if (sequence.dates && sequence.dates.length > 0) {
|
||||
setSequenceToTest(sequenceId);
|
||||
setIsConfirmTestOpen(true);
|
||||
} else {
|
||||
toast.error("Cette séquence n'a pas de dates configurées");
|
||||
}
|
||||
};
|
||||
|
||||
const confirmTestRappel = () => {
|
||||
if (sequenceToTest !== null) {
|
||||
testerRappelMutation.mutate({ sequenceId: sequenceToTest });
|
||||
}
|
||||
};
|
||||
|
||||
const resetForm = () => {
|
||||
setFormData({
|
||||
formationId: "",
|
||||
@@ -833,15 +854,7 @@ export default function AdminSequences() {
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => {
|
||||
if (sequence.dates && sequence.dates.length > 0) {
|
||||
testerRappelMutation.mutate({
|
||||
sequenceId: sequence.id
|
||||
});
|
||||
} else {
|
||||
toast.error("Cette séquence n'a pas de dates configurées");
|
||||
}
|
||||
}}
|
||||
onClick={() => handleTestRappel(sequence.id, sequence)}
|
||||
disabled={testerRappelMutation.isPending}
|
||||
title="Tester l'envoi d'un rappel"
|
||||
>
|
||||
@@ -1058,6 +1071,36 @@ export default function AdminSequences() {
|
||||
</form>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
|
||||
{/* Boîte de dialogue de confirmation pour le test de rappel */}
|
||||
<Dialog open={isConfirmTestOpen} onOpenChange={setIsConfirmTestOpen}>
|
||||
<DialogContent>
|
||||
<DialogHeader>
|
||||
<DialogTitle>Confirmer l'envoi du test</DialogTitle>
|
||||
<DialogDescription>
|
||||
Êtes-vous sûr de vouloir envoyer un email de test de rappel à tous les apprenants inscrits confirmés de cette séquence ?
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
<div className="flex justify-end gap-2 pt-4">
|
||||
<Button
|
||||
variant="outline"
|
||||
onClick={() => {
|
||||
setIsConfirmTestOpen(false);
|
||||
setSequenceToTest(null);
|
||||
}}
|
||||
disabled={testerRappelMutation.isPending}
|
||||
>
|
||||
Annuler
|
||||
</Button>
|
||||
<Button
|
||||
onClick={confirmTestRappel}
|
||||
disabled={testerRappelMutation.isPending}
|
||||
>
|
||||
{testerRappelMutation.isPending ? "Envoi en cours..." : "Valider"}
|
||||
</Button>
|
||||
</div>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
</div>
|
||||
</DashboardLayout>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user