import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useForm, Controller } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { createTicketSchema, type CreateTicketInput } from '../../../shared/schemas/ticket'; import Modal from '../components/Modal'; import CTISelect from '../components/CTISelect'; import { useUsers, useCreateTicket } from '../api/queries'; interface NewTicketModalProps { onClose: () => void; } export default function NewTicketModal({ onClose }: NewTicketModalProps) { const navigate = useNavigate(); const { data: users = [] } = useUsers(); const createTicket = useCreateTicket(); const [error, setError] = useState(''); const { register, handleSubmit, control, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(createTicketSchema), defaultValues: { title: '', overview: '', severity: 3, categoryId: '', typeId: '', itemId: '', assigneeId: undefined, }, }); const onSubmit = async (data: CreateTicketInput) => { setError(''); try { const { assigneeId, ...rest } = data; const created = await createTicket.mutateAsync( assigneeId ? { ...rest, assigneeId } : rest, ); onClose(); navigate(`/${created.displayId}`); } catch { setError('Failed to create ticket'); } }; const inputClass = 'w-full bg-gray-800 border border-gray-700 text-gray-100 placeholder-gray-500 rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-transparent'; const labelClass = 'block text-sm font-medium text-gray-300 mb-1'; const errorClass = 'mt-1 text-xs text-red-400'; return (
{error && (
{error}
)}
{errors.title &&

{errors.title.message}

}