- Économie : ~1240 lignes de code dupliqué - Réduction : ~60% du code modal - Amélioration : Cohérence et maintenabilité
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
'use client';
|
|
import { propositionService } from '@/lib/services';
|
|
import { Proposition } from '@/types';
|
|
import { DeleteModal } from './base/DeleteModal';
|
|
|
|
interface DeletePropositionModalProps {
|
|
isOpen: boolean;
|
|
onClose: () => void;
|
|
onSuccess: () => void;
|
|
proposition: Proposition | null;
|
|
}
|
|
|
|
export default function DeletePropositionModal({ isOpen, onClose, onSuccess, proposition }: DeletePropositionModalProps) {
|
|
if (!proposition) return null;
|
|
|
|
const handleDelete = async () => {
|
|
await propositionService.delete(proposition.id);
|
|
onSuccess();
|
|
};
|
|
|
|
return (
|
|
<DeleteModal
|
|
isOpen={isOpen}
|
|
onClose={onClose}
|
|
onConfirm={handleDelete}
|
|
title="Supprimer la proposition"
|
|
description="Cette action est irréversible. La proposition sera définitivement supprimée."
|
|
itemName="Proposition"
|
|
itemDetails={
|
|
<>
|
|
<p className="text-sm text-slate-600 dark:text-slate-300">
|
|
<strong>Titre :</strong> {proposition.title}
|
|
</p>
|
|
<p className="text-sm text-slate-600 dark:text-slate-300">
|
|
<strong>Auteur :</strong> {proposition.author_first_name} {proposition.author_last_name}
|
|
</p>
|
|
<p className="text-sm text-slate-600 dark:text-slate-300">
|
|
<strong>Email :</strong> {proposition.author_email}
|
|
</p>
|
|
</>
|
|
}
|
|
warningMessage="Cette action supprimera également tous les votes associés à cette proposition."
|
|
/>
|
|
);
|
|
}
|