From 5f6a00f9f2bcaa58b6291565f2a5f62bd1d24c95 Mon Sep 17 00:00:00 2001 From: pramod mahajan Date: Tue, 22 Jul 2025 18:53:17 +0530 Subject: [PATCH] initiated forn edit and created with one component --- src/components/Expenses/ExpenseList.jsx | 6 +- src/components/Expenses/ExpenseSchema.js | 15 ++++ .../{CreateExpense.jsx => ManageExpense.jsx} | 41 ++++++---- src/hooks/useExpense.js | 13 ++++ src/pages/Expense/ExpensePage.jsx | 74 ++++++++++++------- src/repositories/ExpsenseRepository.jsx | 5 +- 6 files changed, 106 insertions(+), 48 deletions(-) rename src/components/Expenses/{CreateExpense.jsx => ManageExpense.jsx} (93%) diff --git a/src/components/Expenses/ExpenseList.jsx b/src/components/Expenses/ExpenseList.jsx index 2ac606e5..a635ac8c 100644 --- a/src/components/Expenses/ExpenseList.jsx +++ b/src/components/Expenses/ExpenseList.jsx @@ -7,7 +7,7 @@ import Pagination from "../common/Pagination"; import { ITEMS_PER_PAGE } from "../../utils/constants"; const ExpenseList = () => { - const { setViewExpense } = useExpenseContext(); + const { setViewExpense,setExpenseModal } = useExpenseContext(); const [currentPage, setCurrentPage] = useState(1); const pageSize = 10; @@ -197,14 +197,12 @@ const ExpenseList = () => { setExpenseModal({isOpen:true,ExpEdit:expense})} > - diff --git a/src/components/Expenses/ExpenseSchema.js b/src/components/Expenses/ExpenseSchema.js index 99b75633..a2e11ed7 100644 --- a/src/components/Expenses/ExpenseSchema.js +++ b/src/components/Expenses/ExpenseSchema.js @@ -68,6 +68,21 @@ export const ExpenseSchema = (expenseTypes) => { }); }; +export const defaultExpense = { + projectId: "", + expensesTypeId: "", + paymentModeId: "", + paidById: "", + transactionDate: "", + transactionId: "", + description: "", + location: "", + supplerName: "", + amount: "", + noOfPersons: "", + billAttachments: [], + } + export const ActionSchema = z.object({ comment : z.string().min(1,{message:"Please leave comment"}), selectedStatus: z.string().min(1, { message: "Please select a status" }), diff --git a/src/components/Expenses/CreateExpense.jsx b/src/components/Expenses/ManageExpense.jsx similarity index 93% rename from src/components/Expenses/CreateExpense.jsx rename to src/components/Expenses/ManageExpense.jsx index cddc79dd..44283453 100644 --- a/src/components/Expenses/CreateExpense.jsx +++ b/src/components/Expenses/ManageExpense.jsx @@ -1,7 +1,7 @@ import { zodResolver } from "@hookform/resolvers/zod"; import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; -import { ExpenseSchema } from "./ExpenseSchema"; +import { defaultExpense, ExpenseSchema } from "./ExpenseSchema"; import { formatFileSize } from "../../utils/appUtils"; import { useProjectName } from "../../hooks/useProjects"; import { useDispatch, useSelector } from "react-redux"; @@ -18,7 +18,7 @@ import { import Avatar from "../common/Avatar"; import { useCreateExpnse } from "../../hooks/useExpense"; -const CreateExpense = ({closeModal}) => { +const CreateExpense = ({closeModal,expenseToEdit,}) => { const [ExpenseType, setExpenseType] = useState(); const dispatch = useDispatch(); const { @@ -36,21 +36,30 @@ const CreateExpense = ({closeModal}) => { formState: { errors }, } = useForm({ resolver: zodResolver(schema), - defaultValues: { - projectId: "", - expensesTypeId: "", - paymentModeId: "", - paidById: "", - transactionDate: "", - transactionId: "", - description: "", - location: "", - supplerName: "", - amount: "", - noOfPersons: "", - billAttachments: [], - }, + defaultValues: defaultExpense, }); + console.log(expenseToEdit) + + useEffect(() => { + if (expenseToEdit) { + reset({ + projectId: expenseToEdit.project.id || "", + expensesTypeId: expenseToEdit.expensesType.id + || "", + paymentModeId: expenseToEdit.paymentMode.id || "", + paidById: expenseToEdit.paidBy.id || "", + transactionDate: expenseToEdit.transactionDate?.slice(0, 10) || "", + transactionId: expenseToEdit.transactionId || "", + description: expenseToEdit.description || "", + location: expenseToEdit.location || "", + supplerName: expenseToEdit.supplerName || "", + amount: expenseToEdit.amount || "", + noOfPersons: expenseToEdit.noOfPersons || "", + billAttachments: expenseToEdit.billAttachments || [], + }); + } +}, [expenseToEdit, reset]); + const selectedproject = watch("projectId"); const selectedProject = useSelector( diff --git a/src/hooks/useExpense.js b/src/hooks/useExpense.js index e63f1f9d..13ea9735 100644 --- a/src/hooks/useExpense.js +++ b/src/hooks/useExpense.js @@ -44,6 +44,19 @@ export const useCreateExpnse = (onSuccessCallBack) => { }); }; +export const useUpdateExepse =()=>{ +const queryClient = useQueryClient(); + +return useMutation({ + mutationFn:async (id,payload)=>{ + const response = await ExpenseRepository.UpdateExpense(id,payload) + }, + onSuccess:(updatedExpense,variables)=>{ + // updation list and details + } +}) +} + export const useActionOnExpense = (onSuccessCallBack) => { const queryClient = useQueryClient(); diff --git a/src/pages/Expense/ExpensePage.jsx b/src/pages/Expense/ExpensePage.jsx index 64a1daaa..9e78eeab 100644 --- a/src/pages/Expense/ExpensePage.jsx +++ b/src/pages/Expense/ExpensePage.jsx @@ -1,7 +1,7 @@ import React, { createContext, useContext, useState } from "react"; import ExpenseList from "../../components/Expenses/ExpenseList"; -import CreateExpense from "../../components/Expenses/CreateExpense"; +import CreateExpense from "../../components/Expenses/ManageExpense"; import ViewExpense from "../../components/Expenses/ViewExpense"; import Breadcrumb from "../../components/common/Breadcrumb"; import GlobalModel from "../../components/common/GlobalModel"; @@ -10,7 +10,10 @@ export const ExpenseContext = createContext(); export const useExpenseContext = () => useContext(ExpenseContext); const ExpensePage = () => { - const [isNewExpense, setNewExpense] = useState(false); + const [expenseModal, setExpenseModal] = useState({ + isOpen: false, + ExpEdit: false, + }); const [viewExpense, setViewExpense] = useState({ expenseId: null, view: false, @@ -18,6 +21,7 @@ const ExpensePage = () => { const contextValue = { setViewExpense, + setExpenseModal, }; return ( @@ -47,7 +51,12 @@ const ExpensePage = () => {