From 09b1664ac7f88d485e776270029ad08e3e8305f2 Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Sun, 18 May 2025 02:15:30 +0530 Subject: [PATCH] created new file for directory form schema --- src/components/Directory/DirectorySchema.js | 57 +++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/components/Directory/DirectorySchema.js diff --git a/src/components/Directory/DirectorySchema.js b/src/components/Directory/DirectorySchema.js new file mode 100644 index 00000000..45e2904a --- /dev/null +++ b/src/components/Directory/DirectorySchema.js @@ -0,0 +1,57 @@ +import { z } from "zod"; +export const ContactSchema = z + .object({ + name: z.string().min(1, "Name is required"), + organization: z.string().min(1, "Organization name is required"), + contactCategoryId: z.string().nullable().optional(), + address: z.string().optional(), + description: z.string().min(1, { message: "Description is required" }), + projectIds: z.array(z.string()).min(1, "Project is required"), + contactEmails: z + .array( + z.object({ + label: z.string(), + emailAddress: z.string().email("Invalid email").or(z.literal("")), + }) + ) + .optional() + .default([]), + + contactPhones: z + .array( + z.object({ + label: z.string(), + phoneNumber: z + .string() + .min(6, "Invalid Number") + .max(10, "Invalid Number") + .regex(/^[\d\s+()-]+$/, "Invalid phone number format").or(z.literal("")), + }) + ) + .optional() + .default([]), + + tags: z + .array( + z.object({ + id: z.string().nullable(), + name: z.string(), + }) + ) + .min(1, { message: "At least one tag is required" }), + bucketIds: z.array(z.string()).optional(), + }) + + .refine((data) => { + const hasValidEmail = (data.contactEmails || []).some( + (e) => e.emailAddress?.trim() !== "" + ); + const hasValidPhone = (data.contactPhones || []).some( + (p) => p.phoneNumber?.trim() !== "" + ); + + return hasValidEmail || hasValidPhone; +}, { + message: "At least one contact (email or phone) is required", + path: ["contactPhone"], +});