import React, { useState } from 'react'; import { useCreateTicket } from '@/hooks/useCreateTicket'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Select } from '@/components/ui/Select'; import { Textarea } from '@/components/ui/Textarea'; interface NewTicketWidgetProps { onCancel: () => void; onSuccess: (ticketId: string) => void; } export const NewTicketWidget: React.FC = ({ onCancel, onSuccess }) => { const { createTicket, isSubmitting, error } = useCreateTicket(); // États locaux isolés dans le widget const [category, setCategory] = useState<'Incident Critique' | 'Évolution' | 'Administratif'>('Incident Critique'); const [ci, setCi] = useState('general'); const [subject, setSubject] = useState(''); const [affectedAsset, setAffectedAsset] = useState(''); const [incidentTime, setIncidentTime] = useState(''); const [description, setDescription] = useState(''); const [buttonVariant, setButtonVariant]=useState('primary'); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); // Le hook gère la logique de création const newTicketId = await createTicket({ category, ci, subject, affectedAsset, incidentTime, description }); // On délègue la navigation (ou l'action post-création) au composant parent if (newTicketId) { onSuccess(newTicketId); } }; return (

Ouvrir un nouveau ticket

Qualification de votre requête ITSM

{error && (
{error}
)} {/* SECTION 1 : QUALIFICATION */}

1. Qualification de la demande

setCi(e.target.value)} options={[ { value: 'general', label: 'Général / Non spécifique' }, { value: 'px1', label: 'Serveur Proxmox Principal (Hyperviseur)' }, { value: 'fw1', label: 'Pare-feu Périphérique (WAN)' }, { value: 'db1', label: 'Base de données MariaDB' }, ]} />
{/* SECTION 2 : DÉTAILS */}

2. Détails techniques

setSubject(e.target.value)} placeholder="Ex: Perte de paquets sur le lien WAN principal" /> setAffectedAsset(e.target.value)} placeholder="Ex: Ordinateur Direction, Imprimante X, etc." />
{category === 'Incident Critique' && (
setIncidentTime(e.target.value)} className="bg-red-50/30 border-red-300 focus:border-red-500 focus:ring-red-500" />
)}