feat: CAT-001 Árbol N-ario de Rubros #30

Merged
dmolinari merged 12 commits from feature/CAT-001 into main 2026-04-19 10:49:37 +00:00
2 changed files with 14 additions and 11 deletions
Showing only changes of commit f07802f769 - Show all commits

View File

@@ -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}

View File

@@ -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({