marco.pms.web/src/components/Directory/DirectorySchema.js

102 lines
2.6 KiB
JavaScript

import { array, 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" }),
designation: z.string().min(1, { message: "Designation is requried" }),
projectIds: z.array(z.string()).nullable().optional(), // 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(13, "Invalid Number")
.regex(/^[\d\s+()-]+$/, "Invalid phone number format")
.or(z.literal("")),
})
)
.optional()
.default([]),
tags: z
.array(
z.object({
id: z.string().nullable().optional(),
name: z.string(),
})
)
.min(1, { message: "At least one tag is required" }),
bucketIds: z
.array(z.string())
.nonempty({ message: "At least one bucket is required" }),
});
// .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"],
// });
// Buckets
export const bucketScheam = z.object({
name: z.string().min(1, { message: "Name is required" }),
description: z.string().min(1, { message: "Description is required" }),
});
export const defaultContactValue = {
name: "",
organization: "",
contactCategoryId: null,
address: "",
description: "",
designation: "",
projectIds: [],
contactEmails: [],
contactPhones: [],
tags: [],
bucketIds: [],
};
export const contactsFilter = z.object({
bucketIds: z.array(z.string()).optional(),
categoryIds: z.array(z.string()).optional(),
});
export const defaultContactFilter = {
bucketIds: [],
categoryIds: [],
};
export const notesFilter = z.object({
createdByIds: z.array(z.string()).optional(),
organizations: z.array(z.string()).optional(),
});
export const defaultNotesFilter = {
createdByIds: [],
organizations: [],
};