From f430e4dc465aa6b419016e4fd1fe46f8b2b403b2 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Wed, 6 Aug 2025 00:02:36 +0530 Subject: [PATCH] created expense masters pages --- src/components/master/ManageExpenseStatus.jsx | 165 ++++++++++++++++++ src/components/master/ManageExpenseType.jsx | 113 ++++++++++++ src/components/master/ManagePaymentMode.jsx | 95 ++++++++++ 3 files changed, 373 insertions(+) create mode 100644 src/components/master/ManageExpenseStatus.jsx create mode 100644 src/components/master/ManageExpenseType.jsx create mode 100644 src/components/master/ManagePaymentMode.jsx diff --git a/src/components/master/ManageExpenseStatus.jsx b/src/components/master/ManageExpenseStatus.jsx new file mode 100644 index 00000000..eccc3bf8 --- /dev/null +++ b/src/components/master/ManageExpenseStatus.jsx @@ -0,0 +1,165 @@ +import React, { useEffect } from "react"; +import { + useForm, + FormProvider, +} from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import SelectMultiple from "../common/SelectMultiple"; +import { useFeatures } from "../../hooks/useMasterRole"; +import { EXPENSE_MANAGEMENT } from "../../utils/constants"; +import { useCreateExpenseStatus, useUpdateExpenseStatus } from "../../hooks/masterHook/useMaster"; +import { displayName } from "react-quill"; +import { AppColorconfig } from "../../utils/appUtils"; + +const ExpenseStatusSchema = z.object({ + name: z.string().min(1, { message: "Name is required" }), + displayName: z.string().min(1, { message: "Display Name is required" }), + description: z.string().min(1, { message: "Description is required" }), + permissionIds: z.array(z.string()).min(1, { + message: "At least one permission is required", + }), + color: z + .string() + .regex(/^#([0-9A-F]{3}){1,2}$/i, { message: "Invalid hex color" }), +}); + +const ManageExpenseStatus = ({data, onClose }) => { + const methods = useForm({ + resolver: zodResolver(ExpenseStatusSchema), + defaultValues: { + name: "", + displayName: "", + description: "", + permissionIds: [], + color: AppColorconfig.colors.primary, + }, + }); + + const { + register, + handleSubmit, + reset, + formState: { errors }, + } = methods; + + const { masterFeatures, loading } = useFeatures(); + + const ExpenseFeature = masterFeatures?.find( + (appfeature) => appfeature.id === EXPENSE_MANAGEMENT + ); + const {mutate:CreateExpenseStatus,isPending:isPending} = useCreateExpenseStatus(()=>onClose?.()) + const {mutate:UpdateExpenseStatus,isPending:Updating} = useUpdateExpenseStatus(()=>onClose?.()); + + + + const onSubmit = (payload) => { + if(data){ + UpdateExpenseStatus({id:data.id,payload:{...payload,id:data.id}}) + }else{ + CreateExpenseStatus(payload) + } + }; + + + useEffect(()=>{ + if(data){ + reset({ + name:data.name ?? "", + displayName:data.displayName ?? "", + description:data.description ?? "", + permissionIds:data.permissionIds ?? [], + color:data.color ?? AppColorconfig.colors.primary + }) + } + },[data]) + return ( + + {loading ? ( +
Loading...
+ ) : ( +
+
+ + + {errors.name &&

{errors.name.message}

} +
+ +
+ + + {errors.displayName && ( +

{errors.displayName.message}

+ )} +
+ +
+ + {errors.permissionIds && ( +

{errors.permissionIds.message}

+ )} +
+ +
+ + + {errors.color && ( +

{errors.color.message}

+ )} +
+ +
+ + + + {errors.description && ( +

{errors.description.message}

+ )} +
+
+ {" "} + +
+
+ + +
+
+ ); +}; + +export default ManageExpenseType; diff --git a/src/components/master/ManagePaymentMode.jsx b/src/components/master/ManagePaymentMode.jsx new file mode 100644 index 00000000..b05856db --- /dev/null +++ b/src/components/master/ManagePaymentMode.jsx @@ -0,0 +1,95 @@ +import React, { useEffect } from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useCreatePaymentMode, useUpdatePaymentMode } from "../../hooks/masterHook/useMaster"; + +const ExpnseSchema = z.object({ + name: z.string().min(1, { message: "Name is required" }), + description: z.string().min(1, { message: "Description is required" }), +}); + +const ManagePaymentMode = ({ data = null, onClose }) => { + const { + register, + handleSubmit, + reset, + formState: { errors }, + } = useForm({ + resolver: zodResolver(ExpnseSchema), + defaultValues: { name: "", description: "" }, + }); + + const { mutate: CreatePaymentMode, isPending } = useCreatePaymentMode(() => + onClose?.() + ); + const {mutate:UpdatePaymentMode,isPending:Updating} = useUpdatePaymentMode(()=>onClose?.()) + + const onSubmit = (payload) => { + if(data){ + UpdatePaymentMode({id:data.id,payload:{...payload,id:data.id}}) + }else( + CreatePaymentMode(payload) + ) + + }; + + useEffect(()=>{ + if(data){ + reset({ + name:data.name ?? "", + description:data.description ?? "" + }) + } + },[data]) + + + return ( +
+
+ + + {errors.name &&

{errors.name.message}

} +
+
+ + + + {errors.description && ( +

{errors.description.message}

+ )} +
+ +
+ + +
+
+ ); +}; + +export default ManagePaymentMode;