'use client'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import * as z from 'zod'; import { Button } from '@/components/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { toast } from 'sonner'; import { documentNumberingService } from '@/lib/services/document-numbering.service'; import { CancelNumberDto } from '@/types/dto/numbering.dto'; import { useState } from 'react'; const formSchema = z.object({ documentNumber: z.string().min(3, 'Document Number is required'), reason: z.string().min(5, 'Reason must be at least 5 characters'), }); type CancelNumberFormData = z.infer; export function CancelNumberForm() { const [loading, setLoading] = useState(false); const form = useForm({ resolver: zodResolver(formSchema) as any, // eslint-disable-line @typescript-eslint/no-explicit-any -- zod 4 + @hookform/resolvers compat defaultValues: { documentNumber: '', reason: '', }, }); async function onSubmit(values: CancelNumberFormData) { setLoading(true); try { const dto: CancelNumberDto = values; await documentNumberingService.cancelNumber(dto); toast.success('Number cancelled successfully.'); form.reset(); } catch (_error) { toast.error('Failed to cancel number. It may not exist or is already cancelled.'); } finally { setLoading(false); } } return (

Cancel Number

Permanently cancel a number (e.g. if generated by mistake). It cannot be reused.

( Document Number )} /> ( Reason )} /> ); }