correciones en las validaciones de crear-editar productos

This commit is contained in:
2025-06-27 14:38:08 -04:00
parent 2840bbec11
commit f5962efb8b
4 changed files with 35 additions and 55 deletions

View File

@@ -10,18 +10,9 @@ import {
FormMessage,
} from '@repo/shadcn/form';
import { Input } from '@repo/shadcn/input';
// import {
// Select,
// SelectContent,
// SelectItem,
// SelectTrigger,
// SelectValue,
// } from '@repo/shadcn/select';
import { useForm } from 'react-hook-form';
import { useCreateUser } from "@/feactures/inventory/hooks/use-mutation";
import { EditInventory, editInventory } from '@/feactures/inventory/schemas/inventory';
import { parse } from 'path';
import { EditInventory, editInventory, formDataInput } from '@/feactures/inventory/schemas/inventory';
interface CreateFormProps {
onSuccess?: () => void;
@@ -31,8 +22,7 @@ interface CreateFormProps {
export function CreateForm({
onSuccess,
onCancel,
defaultValues,
onCancel
}: CreateFormProps) {
const {
mutate: saveAccountingAccounts,
@@ -40,17 +30,15 @@ export function CreateForm({
isError,
} = useCreateUser();
// const { data: AccoutingAccounts } = useSurveyMutation();
const defaultformValues = {
title: defaultValues?.title || '',
description: defaultValues?.description || '',
price: defaultValues?.price || '',
stock: defaultValues?.stock || 0,
urlImg: defaultValues?.urlImg || ''
title: '',
description: '',
price: '',
stock: '',
urlImg: ''
}
const form = useForm<EditInventory>({
const form = useForm<formDataInput>({
resolver: zodResolver(editInventory),
defaultValues: defaultformValues,
mode: 'onChange', // Enable real-time validation
@@ -58,9 +46,7 @@ export function CreateForm({
const onSubmit = async (data: EditInventory) => {
const formData = data
saveAccountingAccounts(formData, {
saveAccountingAccounts(data, {
onSuccess: () => {
form.reset();
onSuccess?.();

View File

@@ -61,7 +61,6 @@ export function AccountPlanModal({
<CreateForm
onSuccess={handleSuccess}
onCancel={handleCancel}
defaultValues={defaultValues}
/>
)}
</DialogContent>

View File

@@ -10,17 +10,9 @@ import {
FormMessage,
} from '@repo/shadcn/form';
import { Input } from '@repo/shadcn/input';
// import {
// Select,
// SelectContent,
// SelectItem,
// SelectTrigger,
// SelectValue,
// } from '@repo/shadcn/select';
import { useForm } from 'react-hook-form';
import { useUpdateUser } from "@/feactures/inventory/hooks/use-mutation";
import { EditInventory, editInventory } from '@/feactures/inventory/schemas/inventory';
import { editInventory, formDataInput, EditInventory } from '@/feactures/inventory/schemas/inventory'; // Renombrado EditInventory para claridad
interface UpdateFormProps {
onSuccess?: () => void;
@@ -36,39 +28,37 @@ export function UpdateForm({
const {
mutate: saveAccountingAccounts,
isPending: isSaving,
isError,
isError, // isError no se usa en el template, podrías usarlo para mostrar un mensaje global
} = useUpdateUser();
const defaultformValues = {
const defaultformValues: formDataInput = {
id: defaultValues?.id,
title: defaultValues?.title || '',
description: defaultValues?.description || '',
price: defaultValues?.price || '',
stock: defaultValues?.stock || 0,
stock: (defaultValues?.stock ?? '').toString(),
urlImg: defaultValues?.urlImg || '',
}
userId: defaultValues?.userId
};
// console.log(defaultValues);
const form = useForm<EditInventory>({
const form = useForm<formDataInput>({
resolver: zodResolver(editInventory),
defaultValues: defaultformValues,
mode: 'onChange', // Enable real-time validation
});
const onSubmit = async (data: EditInventory) => {
const onSubmit = async (data: formDataInput) => {
const formData = data
saveAccountingAccounts(formData, {
saveAccountingAccounts(data, {
onSuccess: () => {
form.reset();
onSuccess?.();
},
onError: () => {
onError: (error) => { // Captura el error para mostrar un mensaje más específico si es posible
console.error("Error al guardar el producto:", error);
form.setError('root', {
type: 'manual',
message: 'Error al guardar la cuenta contable',
message: error.message || 'Error al guardar el producto', // Mejor mensaje de error
});
},
});
@@ -118,7 +108,8 @@ export function UpdateForm({
<FormItem>
<FormLabel>Precio</FormLabel>
<FormControl>
<Input {...field} value={field.value?.toString() ?? ''}/>
{/* Simplificado. price es z.string(), field.value ya es string o undefined. */}
<Input {...field} />
</FormControl>
<FormMessage />
</FormItem>
@@ -132,7 +123,8 @@ export function UpdateForm({
<FormItem>
<FormLabel>Cantidad/Stock</FormLabel>
<FormControl>
<Input {...field}/>
{/* Añadido type="number" para UX. field.value ya es string debido a formDataInput */}
<Input {...field} type="number" />
</FormControl>
<FormMessage />
</FormItem>

View File

@@ -1,7 +1,8 @@
import { z } from 'zod';
export type InventoryTable = z.infer<typeof product>;
export type EditInventory = z.infer<typeof editInventory>;
export type EditInventory = z.infer<typeof editInventory>; //output
export type formDataInput = z.input<typeof editInventory>;
export const product = z.object({
id: z.number().optional(),
@@ -18,7 +19,9 @@ export const editInventory = z.object({
id: z.number().optional(),
title: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }),
description: z.string().min(10, { message: "Debe de tener 10 o más caracteres" }),
stock: z.string().transform(val => Number(val)),
stock: z.string().transform(val => Number(val)).pipe(z.number(
{ invalid_type_error: 'El stock debe ser un número' }).min(0, { message: "El stock debe ser mayor a 0" })
),
price: z.string(),
urlImg: z.string(),
userId: z.number().optional(),