- Économie : ~1240 lignes de code dupliqué - Réduction : ~60% du code modal - Amélioration : Cohérence et maintenabilité
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
'use client';
|
|
import { campaignService } from '@/lib/services';
|
|
import { Campaign } from '@/types';
|
|
import { DeleteModal } from './base/DeleteModal';
|
|
import { MarkdownContent } from './MarkdownContent';
|
|
|
|
interface DeleteCampaignModalProps {
|
|
isOpen: boolean;
|
|
onClose: () => void;
|
|
onSuccess: () => void;
|
|
campaign: Campaign | null;
|
|
}
|
|
|
|
export default function DeleteCampaignModal({ isOpen, onClose, onSuccess, campaign }: DeleteCampaignModalProps) {
|
|
if (!campaign) return null;
|
|
|
|
const handleDelete = async () => {
|
|
await campaignService.delete(campaign.id);
|
|
onSuccess();
|
|
};
|
|
|
|
return (
|
|
<DeleteModal
|
|
isOpen={isOpen}
|
|
onClose={onClose}
|
|
onConfirm={handleDelete}
|
|
title="Supprimer la campagne"
|
|
description="Cette action est irréversible. Toutes les données associées à cette campagne seront définitivement supprimées."
|
|
itemName="Campagne"
|
|
itemDetails={
|
|
<>
|
|
<p className="text-sm text-slate-600 dark:text-slate-300">
|
|
<strong>Titre :</strong> {campaign.title}
|
|
</p>
|
|
<p className="text-sm text-slate-600 dark:text-slate-300">
|
|
<strong>Description :</strong> <MarkdownContent content={campaign.description} />
|
|
</p>
|
|
</>
|
|
}
|
|
warningMessage="Cette action supprimera également toutes les propositions et participants associés à cette campagne."
|
|
/>
|
|
);
|
|
}
|