From 15a1309275adb1bba571d38f2c35729109d7292e Mon Sep 17 00:00:00 2001 From: andrzej Date: Tue, 25 Jun 2024 12:20:56 +0200 Subject: [PATCH] improve client side data validation --- src/app/ui/forms/sub.tsx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/app/ui/forms/sub.tsx b/src/app/ui/forms/sub.tsx index 2d6d20e..52a6496 100644 --- a/src/app/ui/forms/sub.tsx +++ b/src/app/ui/forms/sub.tsx @@ -40,6 +40,30 @@ const FormSchema = z.object({ responded: z.date().transform((date) => date.toString()).optional(), responseId: z.coerce.number() }) + .refine(object => { + const submitted = new Date(object.submitted) + const responded = object.responded ? new Date(object.responded) : null + return responded >= submitted || responded === null + }, + { + path: ["responded"], + message: "'Responded' must be a later date than 'submitted'" + }) + .refine(object => { + if (object.responded) { + //there is a 'responded' date and the response is not 'pending' + return object.responseId !== 7 + } + if (!object.responded) { + //there is not a 'responded' date and the response is pending + return object.responseId === 7 + } + }, + { + path: ["responseId"], + message: "A pending response cannot have a date, and a non-pending response must have a date" + } + ) export default function SubmissionForm({ stories, pubs, responses, createSub }) {