remix-demo

react router (remix) demo

git clone https://9o.is/git/remix-demo.git

foodEntry.ts

(1317B)


      1 import { withZod } from "@remix-validated-form/with-zod";
      2 import { z } from "zod";
      3 
      4 export const foodEntryUserSchema = z
      5   .object({
      6     name: z
      7       .string()
      8       .min(1, { message: "Food name is required" })
      9       .max(64, { message: "Food name is too long" }),
     10     consumed: z
     11       .string()
     12       .min(1, { message: "Consumed Date is required" })
     13       .regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/, {
     14         message: "Consumed Date is invalid",
     15       })
     16       .refine((x) => new Date(x) < new Date(), {
     17         message: "Consumed Date is too young",
     18       }),
     19     calories: z
     20       .string()
     21       .min(1, { message: "Calories is required" })
     22       .refine((x) => !Number.isNaN(Number(x)), {
     23         message: "Calories is not a number",
     24       })
     25       .refine((x) => Number(x) >= 0, {
     26         message: "Calories is a non-negative number",
     27       })
     28       .refine((x) => Number(x) <= 5000, {
     29         message: "Too many calories",
     30       }),
     31   })
     32   .strict();
     33 
     34 export const foodEntryAdminSchema = foodEntryUserSchema
     35   .extend({
     36     userId: z
     37       .string()
     38       .min(1, { message: "User ID is required" })
     39       .cuid({ message: "User ID is not valid" }),
     40   })
     41   .strict();
     42 
     43 export const foodEntryUserValidator = withZod(foodEntryUserSchema);
     44 export const foodEntryAdminValidator = withZod(foodEntryAdminSchema);