From 4d8af5da91119043d302dcfae4b811045e8bdecd Mon Sep 17 00:00:00 2001 From: "pramod.mahajan" Date: Fri, 21 Nov 2025 12:57:54 +0530 Subject: [PATCH] added pre-fill updating --- .../common/Forms/SelectFieldServerSide.jsx | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/components/common/Forms/SelectFieldServerSide.jsx b/src/components/common/Forms/SelectFieldServerSide.jsx index 7befef92..4b7648b1 100644 --- a/src/components/common/Forms/SelectFieldServerSide.jsx +++ b/src/components/common/Forms/SelectFieldServerSide.jsx @@ -3,6 +3,7 @@ import Label from "../Label"; import { useDebounce } from "../../../utils/appUtils"; import { useEmployeesName } from "../../../hooks/useEmployees"; import { useProjectBothName } from "../../../hooks/useProjects"; +import EmployeeRepository from "../../../repositories/EmployeeRepository"; const SelectEmployeeServerSide = ({ label = "Select", @@ -18,6 +19,7 @@ const SelectEmployeeServerSide = ({ }) => { const [searchText, setSearchText] = useState(""); const debounce = useDebounce(searchText, 300); + const [forcedSelected, setForcedSelected] = useState(null); const { data, isLoading } = useEmployeesName( projectId, @@ -34,22 +36,15 @@ const SelectEmployeeServerSide = ({ return `${emp.firstName || ""} ${emp.lastName || ""}`.trim(); }; - /** ----------------------------- - * SELECTED OPTION (SINGLE) - * ----------------------------- */ let selectedSingle = null; - if (!isMultiple) { if (isFullObject && value) selectedSingle = value; else if (!isFullObject && value) - selectedSingle = options.find((o) => o[valueKey] === value); + selectedSingle = + options.find((o) => o[valueKey] === value) || forcedSelected; } - /** ----------------------------- - * SELECTED OPTION (MULTIPLE) - * ----------------------------- */ let selectedList = []; - if (isMultiple && Array.isArray(value)) { if (isFullObject) selectedList = value; else { @@ -57,54 +52,61 @@ const SelectEmployeeServerSide = ({ } } - /** Main button label */ const displayText = !isMultiple ? getDisplayName(selectedSingle) || placeholder : selectedList.length > 0 ? selectedList.map((e) => getDisplayName(e)).join(", ") : placeholder; - /** ----------------------------- - * HANDLE OUTSIDE CLICK - * ----------------------------- */ useEffect(() => { const handleClickOutside = (e) => { if (dropdownRef.current && !dropdownRef.current.contains(e.target)) { setOpen(false); } }; - document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); - /** ----------------------------- - * HANDLE SELECT - * ----------------------------- */ const handleSelect = (option) => { if (!isMultiple) { - // SINGLE SELECT if (isFullObject) onChange(option); else onChange(option[valueKey]); + setOpen(false); } else { - // MULTIPLE SELECT let updated = []; - const exists = selectedList.some((e) => e[valueKey] === option[valueKey]); - - if (exists) { - // remove - updated = selectedList.filter((e) => e[valueKey] !== option[valueKey]); - } else { - // add - updated = [...selectedList, option]; - } - + updated = exists + ? selectedList.filter((e) => e[valueKey] !== option[valueKey]) + : [...selectedList, option]; if (isFullObject) onChange(updated); else onChange(updated.map((x) => x[valueKey])); } }; + useEffect(() => { + if (!value || isFullObject) return; + + const exists = options.some((o) => o[valueKey] === value); + if (exists) return; + + const loadSingleEmployee = async () => { + try { + const emp = await EmployeeRepository.getEmployeeName( + null, + null, + true, + value + ); + setForcedSelected(emp.data[0]); + } catch (err) { + console.error("Failed to load selected employee", err); + } + }; + + loadSingleEmployee(); + }, [value, options, isFullObject, valueKey]); + return (
{label && ( @@ -126,7 +128,6 @@ const SelectEmployeeServerSide = ({ - {/* DROPDOWN */} {open && (
); }; + export default SelectEmployeeServerSide; export const SelectProjectField = ({ @@ -211,9 +215,6 @@ export const SelectProjectField = ({ return `${project.name || ""}`.trim(); }; - /** ----------------------------- - * SELECTED OPTION (SINGLE) - * ----------------------------- */ let selectedSingle = null; if (!isMultiple) { @@ -222,9 +223,6 @@ export const SelectProjectField = ({ selectedSingle = options.find((o) => o[valueKey] === value); } - /** ----------------------------- - * SELECTED OPTION (MULTIPLE) - * ----------------------------- */ let selectedList = []; if (isMultiple && Array.isArray(value)) { @@ -345,10 +343,12 @@ export const SelectProjectField = ({ selectedSingle[valueKey] === option[valueKey]; return ( -
  • +