import { z } from "zod"; export const newTenantSchema = z.object({ firstName: z .string().trim() .min(1, { message: "First Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "First Name should contain only letters!" }), lastName: z .string().trim() .min(1, { message: "Last Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "Last Name should contain only letters!" }), email: z.string().trim().email("Invalid email address"), description: z.string().trim().optional(), domainName: z.string().trim().optional(), billingAddress: z.string().trim().nonempty("Billing address is required"), taxId: z.string().trim().optional(), logoImage: z.string().trim().optional(), organizationName: z.string().trim().nonempty("Organization name is required"), officeNumber: z.string().trim().optional(), contactNumber: z.string().trim() .nonempty("Contact number is required") .regex(/^\+?[1-9]\d{7,14}$/, "Enter a valid contact number"), onBoardingDate: z.preprocess((val) => { if (typeof val === "string" && val.includes("-")) { const [day, month, year] = val.split("-"); return new Date(`${year}-${month}-${day}`); } return val; }, z.date({ required_error: "Onboarding date is required", invalid_type_error: "Invalid date format", })), organizationSize: z.string().nonempty("Organization size is required"), industryId: z.string().uuid("Invalid industry ID"), reference: z.string().nonempty("Reference is required"), }); export const tenantDefaultValues = { firstName: "", lastName: "", email: "", description: "", domainName: "", billingAddress: "", taxId: "", logoImage: "", organizationName: "", officeNumber: "", contactNumber: "", onBoardingDate: new Date(), // or `null` if you want it empty organizationSize: "", industryId: "", // should be a valid UUID if pre-filled reference: "", }; export const getSubscriptionSchema = (minUsers) => z.object({ planId: z.string().min(1, { message: "Please select Plan" }), currencyId: z.string().uuid("Invalid currency"), maxUsers: z .number({ invalid_type_error: "Must be a number" }) .min(minUsers, { message: `Team size must be greater than or equal to ${minUsers}` }), frequency: z .number({ invalid_type_error: "Frequency must be a number" }) .min(0, "Please select any one Frequency"), isTrial: z.boolean(), autoRenew: z.boolean(), }); export const subscriptionDefaultValues = { // tenantId: "", planId: "", currencyId: "", maxUsers: 1, frequency: 1, isTrial: false, autoRenew: false, }; export const filterSchema = z.object({ industryIds: z.array(z.string()).optional(), // createdByIds: z.array(z.string()).optional(), tenantStatusIds: z.array(z.string()).optional(), references: z.array(z.string()).optional(), startDate: z.string().optional(), endDate: z.string().optional(), }); export const defaultFilterValues = { industryIds: [], // createdByIds: [], tenantStatusIds: [], references: [], startDate:null, endDate:null, }; export const getStepFields = (stepIndex) => { const stepFieldMap = { 0: [ "firstName", "lastName", "email", "contactNumber", "billingAddress", ], 1: [ "organizationName", "officeNumber", "domainName", "description", "onBoardingDate", "organizationSize", "taxId", "industryId", "reference", "logoImage", ], 2: [ "tenantId", "planId", "currencyId", "maxUsers", "frequency", "isTrial", "autoRenew", ], }; return stepFieldMap[stepIndex] || []; }; export const EditTenant = z.object({ firstName: z .string().trim() .min(1, { message: "First Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "First Name should contain only letters!" }), lastName: z .string().trim() .min(1, { message: "Last Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "Last Name should contain only letters!" }), description: z.string().trim().optional(), domainName: z.string().trim().optional(), billingAddress: z.string().trim().min(1, { message: "Billing Address is required!" }), taxId: z.string().trim().optional(), logoImage: z.string().optional(), officeNumber: z.string().trim().optional(), contactNumber: z.string().trim() .nonempty("Contact number is required") .regex(/^\+?[1-9]\d{7,14}$/, "Enter a valid contact number"), organizationSize: z.string().min(1, { message: "Organization Size is required!" }), industryId: z.string().min(1, { message: "Invalid Industry ID!" }), reference: z.string().optional(), });