feat: CAT-001 Árbol N-ario de Rubros #30
@@ -29,12 +29,17 @@ const rubroFormSchema = z.object({
|
||||
.min(1, 'El nombre es requerido')
|
||||
.max(200, 'Máximo 200 caracteres'),
|
||||
tarifarioBaseId: z
|
||||
.union([z.coerce.number().int().positive('Debe ser un número positivo'), z.literal('')])
|
||||
.string()
|
||||
.transform((val) => (val === '' ? null : Number(val)))
|
||||
.pipe(z.number().int().positive('Debe ser un número positivo').nullable())
|
||||
.optional()
|
||||
.nullable(),
|
||||
})
|
||||
|
||||
export type RubroFormValues = z.infer<typeof rubroFormSchema>
|
||||
export type RubroFormValues = {
|
||||
nombre: string
|
||||
tarifarioBaseId?: number | null
|
||||
}
|
||||
|
||||
interface RubroFormDialogProps {
|
||||
open: boolean
|
||||
@@ -71,11 +76,12 @@ export function RubroFormDialog({
|
||||
}: RubroFormDialogProps) {
|
||||
const isEdit = !!rubro
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const form = useForm<RubroFormValues>({
|
||||
resolver: zodResolver(rubroFormSchema),
|
||||
resolver: zodResolver(rubroFormSchema) as any,
|
||||
defaultValues: {
|
||||
nombre: rubro?.nombre ?? '',
|
||||
tarifarioBaseId: (rubro?.tarifarioBaseId ?? '') as unknown as undefined,
|
||||
tarifarioBaseId: rubro?.tarifarioBaseId ?? null,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -83,7 +89,7 @@ export function RubroFormDialog({
|
||||
if (open) {
|
||||
form.reset({
|
||||
nombre: rubro?.nombre ?? '',
|
||||
tarifarioBaseId: (rubro?.tarifarioBaseId ?? '') as unknown as undefined,
|
||||
tarifarioBaseId: rubro?.tarifarioBaseId ?? null,
|
||||
})
|
||||
}
|
||||
}, [open, rubro, form])
|
||||
@@ -134,8 +140,8 @@ export function RubroFormDialog({
|
||||
<FormControl>
|
||||
<Input
|
||||
{...field}
|
||||
value={(field.value as string | number | undefined) ?? ''}
|
||||
onChange={(e) => field.onChange(e.target.value)}
|
||||
value={field.value != null ? String(field.value) : ''}
|
||||
onChange={(e) => field.onChange(e.target.value === '' ? null : e.target.value)}
|
||||
type="number"
|
||||
min={1}
|
||||
disabled={isPending}
|
||||
|
||||
@@ -63,10 +63,7 @@ export function RubrosPage() {
|
||||
async function handleFormSubmit(values: RubroFormValues) {
|
||||
setFormError(null)
|
||||
try {
|
||||
const tarifarioId =
|
||||
values.tarifarioBaseId === '' || values.tarifarioBaseId == null
|
||||
? null
|
||||
: Number(values.tarifarioBaseId)
|
||||
const tarifarioId = values.tarifarioBaseId ?? null
|
||||
|
||||
if (editingRubro) {
|
||||
await updateRubro({
|
||||
|
||||
Reference in New Issue
Block a user