From b2f5213f7df65e2aa78bcaadf0b02c474f6986b2 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Fri, 22 Aug 2025 15:48:43 +0530 Subject: [PATCH] restric to enter aph, symbol character --- src/components/Tenant/EditProfile.jsx | 3 ++ src/components/Tenant/SubScription.jsx | 62 ++++++++++++++++++-------- src/components/Tenant/TenantSchema.js | 38 ++++++++-------- 3 files changed, 65 insertions(+), 38 deletions(-) diff --git a/src/components/Tenant/EditProfile.jsx b/src/components/Tenant/EditProfile.jsx index 76ea0355..7df1ff97 100644 --- a/src/components/Tenant/EditProfile.jsx +++ b/src/components/Tenant/EditProfile.jsx @@ -5,6 +5,8 @@ import { useIndustries, useTenantDetails, useUpdateTenantDetails } from '../../h import { orgSize, reference } from '../../utils/constants'; import { LogoUpload } from './LogoUpload'; import showToast from '../../services/toastService'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { EditTenant } from './TenantSchema'; const EditProfile = ({ TenantId,onClose }) => { const { data, isLoading, isError, error } = useTenantDetails(TenantId); @@ -17,6 +19,7 @@ const EditProfile = ({ TenantId,onClose }) => { }) const methods = useForm({ + resolver:zodResolver(EditTenant), defaultValues: { firstName: "", lastName: "", diff --git a/src/components/Tenant/SubScription.jsx b/src/components/Tenant/SubScription.jsx index ffb8c508..015b8245 100644 --- a/src/components/Tenant/SubScription.jsx +++ b/src/components/Tenant/SubScription.jsx @@ -1,5 +1,9 @@ import React, { useState, useEffect } from "react"; -import { useAddSubscription, useSubscriptionPlan, useUpgradeSubscription } from "../../hooks/useTenant"; +import { + useAddSubscription, + useSubscriptionPlan, + useUpgradeSubscription, +} from "../../hooks/useTenant"; import SegmentedControl from "./SegmentedControl"; import { useFormContext } from "react-hook-form"; import { CONSTANT_TEXT } from "../../utils/constants"; @@ -18,7 +22,7 @@ const SubScription = ({ onSubmitSubScription, onNext }) => { data: plans = [], isError, isLoading, - error:subscriptionGettingError + error: subscriptionGettingError, } = useSubscriptionPlan(frequency); const { @@ -34,13 +38,12 @@ const SubScription = ({ onSubmitSubScription, onNext }) => { isPending, error, } = useAddSubscription(() => { - naviget("/tenants") + naviget("/tenants"); }); - const { - mutate : updgradeSubscription,isPending : upgrading - } = useUpgradeSubscription(()=>{ - naviget("/tenants") - }) + const { mutate: updgradeSubscription, isPending: upgrading } = + useUpgradeSubscription(() => { + naviget("/tenants"); + }); const handleSubscriptionSubmit = async () => { const isValid = await trigger([ "planId", @@ -56,17 +59,24 @@ const SubScription = ({ onSubmitSubScription, onNext }) => { // onSubmitSubScription(payload); let subscriptionPayload = null; - if(selectedTenant?.operationMode === 1){ - subscriptionPayload = { planId : payload.planId,currencyId :payload.currencyId,maxUsers:payload.maxUsers, tenantId: selectedTenant?.data?.id } - updgradeSubscription(subscriptionPayload) - }else{ - subscriptionPayload = {...payload,tenantId: selectedTenant?.data?.id} - AddSubScription(subscriptionPayload); + if (selectedTenant?.operationMode === 1) { + subscriptionPayload = { + planId: payload.planId, + currencyId: payload.currencyId, + maxUsers: payload.maxUsers, + tenantId: selectedTenant?.data?.id, + }; + updgradeSubscription(subscriptionPayload); + } else { + subscriptionPayload = { + ...payload, + tenantId: selectedTenant?.data?.id, + }; + AddSubScription(subscriptionPayload); } } }; - const handlePlanSelection = (plan) => { setSelectedPlanId(plan.id); setValue("planId", plan.id); @@ -75,11 +85,17 @@ const SubScription = ({ onSubmitSubScription, onNext }) => { }; const selectedPlan = plans.find((p) => p.id === selectedPlanId); - if(isLoading) return
Loading....
- if(isError) return
{subscriptionGettingError?.message}
+ if (isLoading) return
Loading....
; + if (isError) + return ( +
{subscriptionGettingError?.message}
+ ); return (
- + {!isLoading && !isError && plans.length > 0 && (
@@ -110,7 +126,6 @@ const SubScription = ({ onSubmitSubScription, onNext }) => {
    -
  • Storage {plan.maxStorage} MB @@ -170,11 +185,20 @@ const SubScription = ({ onSubmitSubScription, onNext }) => { { + // block "e", "+", "-", ".", "," + if (["e", "E", "+", "-", "."].includes(e.key)) { + e.preventDefault(); + } + }} />
diff --git a/src/components/Tenant/TenantSchema.js b/src/components/Tenant/TenantSchema.js index 9c769a7c..827d799f 100644 --- a/src/components/Tenant/TenantSchema.js +++ b/src/components/Tenant/TenantSchema.js @@ -2,22 +2,22 @@ import { z } from "zod"; export const newTenantSchema = z.object({ firstName: z - .string() + .string().trim() .min(1, { message: "First Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "First Name should contain only letters!" }), lastName: z - .string() + .string().trim() .min(1, { message: "Last Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "Last Name should contain only letters!" }), - email: z.string().email("Invalid email address"), - description: z.string().optional(), - domainName: z.string().nonempty("Domain name is required"), - billingAddress: z.string().nonempty("Billing address is required"), - taxId: z.string().nonempty("Tax ID is required"), - logoImage: z.string().optional(), - organizationName: z.string().nonempty("Organization name is required"), - officeNumber: z.string().nonempty("Office number is required"), - contactNumber: z.string() + email: z.string().trim().email("Invalid email address"), + description: z.string().trim().optional(), + domainName: z.string().trim().nonempty("Domain name is required"), + billingAddress: z.string().trim().nonempty("Billing address is required"), + taxId: z.string().trim().nonempty("Tax ID is required"), + logoImage: z.string().trim().optional(), + organizationName: z.string().trim().nonempty("Organization name is required"), + officeNumber: z.string().trim().nonempty("Office number is required"), + contactNumber: z.string().trim() .nonempty("Contact number is required") .regex(/^\+?[1-9]\d{7,14}$/, "Enter a valid contact number"), onBoardingDate: z.preprocess((val) => { @@ -132,20 +132,20 @@ export const getStepFields = (stepIndex) => { export const EditTenant = z.object({ firstName: z - .string() + .string().trim() .min(1, { message: "First Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "First Name should contain only letters!" }), lastName: z - .string() + .string().trim() .min(1, { message: "Last Name is required!" }) .regex(/^[A-Za-z]+$/, { message: "Last Name should contain only letters!" }), - description: z.string().optional(), - domainName: z.string().min(1, { message: "Domain Name is required!" }), - billingAddress: z.string().min(1, { message: "Billing Address is required!" }), - taxId: z.string().min(1, { message: "Tax ID is required!" }), + description: z.string().trim().optional(), + domainName: z.string().trim().min(1, { message: "Domain Name is required!" }), + billingAddress: z.string().trim().min(1, { message: "Billing Address is required!" }), + taxId: z.string().trim().min(1, { message: "Tax ID is required!" }), logoImage: z.string().optional(), - officeNumber: z.string().min(1, { message: "Office Number is required!" }), - contactNumber: z.string() + officeNumber: z.string().trim().min(1, { message: "Office Number is required!" }), + 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!" }),