From e007c0e8da1f26ffa0111e36ac479a719449a149 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Wed, 3 Sep 2025 12:56:39 +0530 Subject: [PATCH] allow to add and update document category inside master --- .../master/ManageDocumentCategory.jsx | 156 ++++++++++++++++++ src/components/master/MasterModal.jsx | 5 +- src/hooks/masterHook/useMaster.js | 48 ++++++ src/repositories/MastersRepository.jsx | 28 +++- 4 files changed, 229 insertions(+), 8 deletions(-) create mode 100644 src/components/master/ManageDocumentCategory.jsx diff --git a/src/components/master/ManageDocumentCategory.jsx b/src/components/master/ManageDocumentCategory.jsx new file mode 100644 index 00000000..8387b1cd --- /dev/null +++ b/src/components/master/ManageDocumentCategory.jsx @@ -0,0 +1,156 @@ +import React, { useEffect } from "react"; +import { useForm, FormProvider } from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useFeatures } from "../../hooks/useMasterRole"; +import { DOCUMENTS_ENTITIES, EXPENSE_MANAGEMENT } from "../../utils/constants"; +import { + useCreateDocumentCatgory, + useUpdateDocumentCategory, +} from "../../hooks/masterHook/useMaster"; + +export const Document_Entity = Object.entries(DOCUMENTS_ENTITIES).map( + ([key, value]) => ({ key, value }) +); + +const ExpenseStatusSchema = z.object({ + name: z.string().min(1, { message: "Name is required" }), + description: z.string().min(1, { message: "Description is required" }), + entityTypeId: z.string().min(1, { message: "Entity is required" }), +}); + +const ManageDocumentCategory = ({ data, onClose }) => { + const methods = useForm({ + resolver: zodResolver(ExpenseStatusSchema), + defaultValues: { + name: "", + description: "", + entityTypeId: "", + }, + }); + + const { + register, + handleSubmit, + reset, + formState: { errors }, + } = methods; + + const { masterFeatures, loading } = useFeatures(); + + const ExpenseFeature = masterFeatures?.find( + (appfeature) => appfeature.id === EXPENSE_MANAGEMENT + ); + + const { mutate: CreateDocumentCategory, isPending } = + useCreateDocumentCatgory(() => onClose?.()); + const { mutate: UpdateDocumentCategory, isPending: Updating } = + useUpdateDocumentCategory(() => onClose?.()); + + const onSubmit = (payload) => { + if (data) { + UpdateDocumentCategory({ + id: data.id, + payload: { ...payload, id: data.id }, + }); + } else { + CreateDocumentCategory(payload); + } + }; + + useEffect(() => { + if (data) { + reset({ + name: data.name ?? "", + description: data.description ?? "", + entityTypeId: data.entityTypeId ?? "", + }); + } + }, [data, reset]); + return ( + + {loading ? ( +
Loading...
+ ) : ( +
+
+

+ {data ? "Update Document Category" : "Add Document Category"} +

+
+ +
+
+ + + {errors.name && ( +

{errors.name.message}

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

{errors.entityTypeId.message}

+ )} +
+ +
+ +