From bc933f4c646e8484485c6327288149da59d2d76f Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Wed, 8 Oct 2025 11:29:51 +0530 Subject: [PATCH] Adding Search box in Expense Paid by dropdown. --- src/components/Expenses/ManageExpense.jsx | 1 + src/components/common/EmployeeSearchInput.jsx | 52 ++++++++----------- src/hooks/useEmployees.js | 6 +-- src/repositories/EmployeeRepository.jsx | 17 +++--- 4 files changed, 35 insertions(+), 41 deletions(-) diff --git a/src/components/Expenses/ManageExpense.jsx b/src/components/Expenses/ManageExpense.jsx index fa19d2c5..9644bb3a 100644 --- a/src/components/Expenses/ManageExpense.jsx +++ b/src/components/Expenses/ManageExpense.jsx @@ -330,6 +330,7 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { control={control} name="paidById" projectId={null} + forAll={expenseToEdit ? true :false} /> diff --git a/src/components/common/EmployeeSearchInput.jsx b/src/components/common/EmployeeSearchInput.jsx index c4cdda09..34fdecaa 100644 --- a/src/components/common/EmployeeSearchInput.jsx +++ b/src/components/common/EmployeeSearchInput.jsx @@ -1,11 +1,16 @@ -import { useState, useEffect, useRef } from "react"; +import { useState, useEffect } from "react"; import { useEmployeesName } from "../../hooks/useEmployees"; import { useDebounce } from "../../utils/appUtils"; import { useController } from "react-hook-form"; import Avatar from "./Avatar"; - -const EmployeeSearchInput = ({ control, name, projectId, placeholder }) => { +const EmployeeSearchInput = ({ + control, + name, + projectId, + placeholder, + forAll, +}) => { const { field: { onChange, value, ref }, fieldState: { error }, @@ -15,32 +20,20 @@ const EmployeeSearchInput = ({ control, name, projectId, placeholder }) => { const [showDropdown, setShowDropdown] = useState(false); const debouncedSearch = useDebounce(search, 500); - const wrapperRef = useRef(null); - - const { - data: employees, - isLoading, - } = useEmployeesName(projectId, debouncedSearch); + const { data: employees, isLoading } = useEmployeesName( + projectId, + debouncedSearch, + forAll + ); useEffect(() => { - if (value && !search) { - const found = employees?.data?.find((emp) => emp.id === value); - if (found) setSearch(found.firstName + " " + found.lastName); - } - }, [value, employees]); - - useEffect(() => { - const handleClickOutside = (e) => { - if (wrapperRef.current && !wrapperRef.current.contains(e.target)) { - setShowDropdown(false); + if (value && employees?.data) { + const found = employees.data.find((emp) => emp.id === value); + if (found && forAll) { + setSearch(found.firstName + " " + found.lastName); } - }; - document.addEventListener("mousedown", handleClickOutside); - - return () => { - document.removeEventListener("mousedown", handleClickOutside); - }; - }, []); + } + }, [value, employees?.data]); const handleSelect = (employee) => { onChange(employee.id); @@ -49,11 +42,11 @@ const EmployeeSearchInput = ({ control, name, projectId, placeholder }) => { }; return ( -
+
{ @@ -68,7 +61,7 @@ const EmployeeSearchInput = ({ control, name, projectId, placeholder }) => { {showDropdown && (employees?.data?.length > 0 || isLoading) && (
    {isLoading ? ( @@ -106,4 +99,3 @@ const EmployeeSearchInput = ({ control, name, projectId, placeholder }) => { }; export default EmployeeSearchInput; - diff --git a/src/hooks/useEmployees.js b/src/hooks/useEmployees.js index afe68248..dce5914a 100644 --- a/src/hooks/useEmployees.js +++ b/src/hooks/useEmployees.js @@ -184,11 +184,11 @@ export const useEmployeeProfile = (employeeId) => { }; }; -export const useEmployeesName = (projectId, search) => { +export const useEmployeesName = (projectId, search,forAll) => { return useQuery({ - queryKey: ["employees", projectId, search], + queryKey: ["employees", projectId, search,forAll], queryFn: async () => - await EmployeeRepository.getEmployeeName(projectId, search), + await EmployeeRepository.getEmployeeName(projectId, search,forAll), staleTime: 5 * 60 * 1000, // Optional: cache for 5 minutes }); diff --git a/src/repositories/EmployeeRepository.jsx b/src/repositories/EmployeeRepository.jsx index 931c7c51..5d2b5948 100644 --- a/src/repositories/EmployeeRepository.jsx +++ b/src/repositories/EmployeeRepository.jsx @@ -10,16 +10,17 @@ const EmployeeRepository = { updateEmployee: (id, data) => api.put(`/users/${id}`, data), // deleteEmployee: ( id ) => api.delete( `/users/${ id }` ), getEmployeeProfile: (id) => api.get(`/api/employee/profile/get/${id}`), - deleteEmployee: (id,active) => api.delete(`/api/employee/${id}?active=${active}`), - getEmployeeName: (projectId, search) => { - const params = new URLSearchParams(); + deleteEmployee: (id, active) => api.delete(`/api/employee/${id}?active=${active}`), + getEmployeeName: (projectId, search, allEmployee) => { + const params = new URLSearchParams(); - if (projectId) params.append("projectId", projectId); - if (search) params.append("searchString", search); + if (projectId) params.append("projectId", projectId); + if (search) params.append("searchString", search); + if (allEmployee) params.append("sendAll", allEmployee) - const query = params.toString(); - return api.get(`/api/Employee/basic${query ? `?${query}` : ""}`); -} + const query = params.toString(); + return api.get(`/api/Employee/basic${query ? `?${query}` : ""}`); + } };