Adding validation in Contact number and adding trim functioanlity.

This commit is contained in:
Kartik Sharma 2025-11-15 15:32:32 +05:30
parent 2252a9c489
commit 031201ea56
3 changed files with 57 additions and 20 deletions

View File

@ -150,6 +150,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
type="text" type="text"
className="form-control form-control-sm" className="form-control form-control-sm"
{...register("name")} {...register("name")}
placeholder="Enter Project Name.."
/> />
{errors?.name && ( {errors?.name && (
<span className="danger-text">{errors.name.message}</span> <span className="danger-text">{errors.name.message}</span>
@ -163,6 +164,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
type="text" type="text"
className="form-control form-control-sm" className="form-control form-control-sm"
{...register("shortName")} {...register("shortName")}
placeholder="Enter Project Short Name.."
/> />
{errors?.shortName && ( {errors?.shortName && (
<span className="danger-text">{errors.shortName.message}</span> <span className="danger-text">{errors.shortName.message}</span>
@ -207,6 +209,10 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
type="text" type="text"
className="form-control form-control-sm" className="form-control form-control-sm"
{...register("contactName")} {...register("contactName")}
placeholder="Enter Employee name.."
onInput={(e) => {
e.target.value = e.target.value.replace(/[^A-Za-z ]/g, "");
}}
/> />
{errors?.contactName && ( {errors?.contactName && (
<span className="danger-text">{errors.contactName.message}</span> <span className="danger-text">{errors.contactName.message}</span>
@ -220,6 +226,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
type="text" type="text"
className="form-control form-control-sm" className="form-control form-control-sm"
{...register("contactEmail")} {...register("contactEmail")}
placeholder="Enter Employee Email.."
/> />
{errors?.contactEmail && ( {errors?.contactEmail && (
<span className="danger-text">{errors.contactEmail.message}</span> <span className="danger-text">{errors.contactEmail.message}</span>
@ -231,8 +238,13 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
</Label> </Label>
<input <input
type="text" type="text"
maxLength={10}
className="form-control form-control-sm" className="form-control form-control-sm"
{...register("contactPhone")} {...register("contactPhone")}
placeholder="Enter Employee Contact.."
onInput={(e) => {
e.target.value = e.target.value.replace(/[^0-9]/g, "");
}}
/> />
{errors?.contactPhone && ( {errors?.contactPhone && (
<span className="danger-text">{errors.contactPhone.message}</span> <span className="danger-text">{errors.contactPhone.message}</span>
@ -244,7 +256,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
</Label> </Label>
<DatePicker <DatePicker
name="assignedDate" name="assignedDate"
className="w-full" className="w-100"
control={control} control={control}
/> />
</div> </div>
@ -258,6 +270,7 @@ const ManageServiceProject = ({ serviceProjectId, onClose }) => {
className="form-control" className="form-control"
// maxLength={maxAddressLength} // maxLength={maxAddressLength}
{...register("address")} {...register("address")}
placeholder="Enter Project Address.."
// onChange={(e) => { // onChange={(e) => {
// setAddressLength(e.target.value.length); // setAddressLength(e.target.value.length);
// }} // }}

View File

@ -3,21 +3,45 @@ import { PROJECT_STATUS } from "../../utils/constants";
//#region Service Project //#region Service Project
export const projectSchema = z.object({ export const projectSchema = z.object({
name: z.string().min(1, "Name is required"), name: z
shortName: z.string().min(1, "Short name is required"), .string()
clientId: z.string().min(1, { message: "Client is required" }), .trim()
.min(1, "Name is required"),
shortName: z
.string()
.trim()
.min(1, "Short name is required"),
clientId: z.string().trim().min(1, { message: "Client is required" }),
services: z services: z
.array(z.string()) .array(z.string())
.min(1, { message: "At least one service required" }), .min(1, { message: "At least one service required" }),
address: z.string().min(1, "Address is required"),
assignedDate: z.string().min(1, { message: "Date is required" }), address: z.string().trim().min(1, "Address is required"),
statusId: z.string().min(1, "Status is required"),
contactName: z.string().min(1, "Contact name is required"), assignedDate: z.string().trim().min(1, { message: "Date is required" }),
statusId: z.string().trim().min(1, "Status is required"),
contactName: z
.string()
.trim()
.min(1, "Contact name is required")
.regex(/^[A-Za-z\s]+$/, "Contact name can contain only letters"),
contactPhone: z contactPhone: z
.string() .string()
.trim()
.regex(/^\d+$/, "Phone number must contain only digits")
.min(7, "Invalid phone number") .min(7, "Invalid phone number")
.max(15, "Phone number too long"), .max(15, "Phone number too long"),
contactEmail: z.string().email("Invalid email address"),
contactEmail: z
.string()
.trim()
.email("Invalid email address"),
}); });
export const defaultProjectValues = { export const defaultProjectValues = {

View File

@ -51,7 +51,7 @@ const DatePicker = ({
<div className={`position-relative ${className} w-max `}> <div className={`position-relative ${className} w-max `}>
<input <input
type="text" type="text"
className="form-control form-control" className="form-control form-control form-control-sm"
placeholder={placeholder} placeholder={placeholder}
value={displayValue} value={displayValue}
onChange={(e) => { onChange={(e) => {