Actualizar escrow
El esquema ideal para este endpoint.
Esquema
Esto valida un formulario de escrow usando Zod, incluidos montos, direcciones de billetera, trustline y una lista de hitos.
import { isValidWallet } from "@/helpers/valid-data.helper";
import { z } from "zod";
export const formSchema = z.object({
contractId: z.string().min(1, {
message: "Se requiere el ID del contrato.",
}),
signer: z.string().min(1, {
message: "Se requiere el firmante.",
}),
escrow: z.object({
title: z.string().min(1, {
message: "Se requiere el título.",
}),
engagementId: z.string().min(1, {
message: "Se requiere el engagement.",
}),
description: z.string().min(10, {
message: "La descripción debe tener al menos 10 caracteres.",
}),
amount: z.string().min(1, {
message: "Se requiere el monto.",
}),
platformFee: z.string().min(1, {
message: "Se requiere la comisión de la plataforma.",
}),
receiverMemo: z.number().min(0, {
message: "El memo del receptor debe ser un número no negativo.",
}),
roles: z.object({
approver: z
.string()
.min(1, {
message: "Se requiere el aprobador.",
})
.refine((value) => isValidWallet(value), {
message: "El aprobador debe ser una billetera válida.",
}),
serviceProvider: z
.string()
.min(1, {
message: "Se requiere el proveedor de servicios.",
})
.refine((value) => isValidWallet(value), {
message: "El proveedor de servicios debe ser una billetera válida.",
}),
platformAddress: z
.string()
.min(1, {
message: "Se requiere la dirección de la plataforma.",
})
.refine((value) => isValidWallet(value), {
message: "La dirección de la plataforma debe ser una billetera válida.",
}),
releaseSigner: z
.string()
.min(1, {
message: "Se requiere el firmante de la liberación.",
})
.refine((value) => isValidWallet(value), {
message: "El firmante de la liberación debe ser una billetera válida.",
}),
disputeResolver: z
.string()
.min(1, {
message: "Se requiere el resolutor de disputas.",
})
.refine((value) => isValidWallet(value), {
message: "El resolutor de disputas debe ser una billetera válida.",
}),
receiver: z
.string()
.min(1, {
message: "Se requiere la dirección del receptor.",
})
.refine((value) => isValidWallet(value), {
message: "La dirección del receptor debe ser una billetera válida.",
}),
}),
trustline: z.object({
address: z.string().min(1, {
message: "Se requiere la dirección de la trustline.",
}),
decimals: z.number().default(10000000),
}),
milestones: z
.array(
z.object({
description: z.string().min(1, {
message: "Se requiere la descripción del hito.",
}),
status: z.string().default("pending"),
evidence: z.string().default(""),
approvedFlag: z.boolean().default(false),
})
)
.min(1, { message: "Se requiere al menos un hito." }),
}),
});
Hook Personalizado
Esto contiene toda la lógica del formulario, incluida la validación del esquema, la función onSubmit y otros estados y funcionalidades.
Formulario
Este formulario está construido con react hook form. Usamos el hook personalizado y el esquema zod mencionados anteriormente.
Última actualización