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!" }),