46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import { z } from "zod";
|
|
|
|
// Allowed document types (must match your DocumentType master table IDs)
|
|
export const REQUIRED_DOC_TYPES = {
|
|
GST: 1,
|
|
PAN: 2,
|
|
REGISTRATION: 3,
|
|
AADHAAR: 4,
|
|
};
|
|
|
|
export const hostCompanyDetailsSchema = z.object({
|
|
companyName: z.string().min(1, "Company name is required"),
|
|
address1: z.string().min(1, "Address1 is required"),
|
|
address2: z.string().optional(),
|
|
hostRefNumber: z.string().min(1, "Host reference number is required"),
|
|
cityXid: z.number().min(1, "City is required"),
|
|
stateXid: z.number().min(1, "State is required"),
|
|
countryXid: z.number().min(1,"Country is required"),
|
|
pinCode: z.string().min(4, "Pincode/Zipcode is required"),
|
|
logoPath: z.string().optional(),
|
|
isSubsidairy: z.boolean(),
|
|
registrationNumber: z.string().min(1, "Registration number is required"),
|
|
panNumber: z.string().min(1, "PAN number is required"),
|
|
gstNumber: z.string().optional(),
|
|
formationDate: z.string().refine((val) => !isNaN(Date.parse(val)), {
|
|
message: "Formation date must be a valid date",
|
|
}),
|
|
companyType: z.string().min(1, "Company type is required"),
|
|
websiteUrl: z.url().optional(),
|
|
instagramUrl: z.url().optional(),
|
|
facebookUrl: z.url().optional(),
|
|
linkedinUrl: z.url().optional(),
|
|
twitterUrl: z.url().optional(),
|
|
currencyXid: z.number().min(1, "Currency is required"),
|
|
});
|
|
|
|
// Validation for documents with file data (base64)
|
|
export const hostDocumentsSchema = z.array(
|
|
z.object({
|
|
documentTypeXid: z.number(),
|
|
documentName: z.string(),
|
|
fileData: z.string().min(1, "File data is required"), // base64 encoded file
|
|
contentType: z.string().optional(), // e.g., "application/pdf", "image/png"
|
|
})
|
|
);
|