102 lines
2.6 KiB
JavaScript
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: [],
|
|
};
|