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