Correction in teams, projectinfra and daily task for dropdown.

This commit is contained in:
Kartik Sharma 2025-12-13 11:51:16 +05:30
parent fa694d8361
commit a309d13247
4 changed files with 145 additions and 124 deletions

View File

@ -55,7 +55,7 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
const { data: assignedServices, isLoading: servicesLoading } = const { data: assignedServices, isLoading: servicesLoading } =
useProjectAssignedServices(projectId); useProjectAssignedServices(projectId);
const { control } = useForm({ const { control, setValue } = useForm({
defaultValues: { defaultValues: {
serviceId: selectedService || "", serviceId: selectedService || "",
}, },
@ -74,6 +74,22 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
}; };
useEffect(() => {
if (!servicesLoading && assignedServices?.length === 1) {
const serviceId = assignedServices[0].id;
// set form value
setValue("serviceId", serviceId, {
shouldDirty: true,
shouldValidate: true,
});
// sync redux
dispatch(setService(serviceId));
}
}, [assignedServices, servicesLoading, setValue, dispatch]);
return ( return (
<> <>
{showModalBuilding && ( {showModalBuilding && (
@ -132,31 +148,27 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
<div className="col-md-4 col-12 dataTables_length text-start py-2 px-2"> <div className="col-md-4 col-12 dataTables_length text-start py-2 px-2">
<div className="ms-4 mt-n1"> <div className="ms-4 mt-n1">
{!servicesLoading && assignedServices?.length > 0 && ( {!servicesLoading && assignedServices?.length > 0 && (
assignedServices.length > 1 ? ( <AppFormController
<AppFormController name="serviceId"
name="serviceId" control={control}
control={control} render={({ field }) => (
render={({ field }) => ( <SelectField
<SelectField label="Select Service"
label="Select Service" options={[...(assignedServices ?? [])]}
options={[{ id: "", name: "All Services" }, ...(assignedServices ?? [])]} placeholder="Choose a Service"
placeholder="Choose a Service" labelKey="name"
valueKey="id"
labelKey="name" value={field.value}
valueKey="id" onChange={(val) => {
value={field.value} field.onChange(val);
onChange={(val) => { dispatch(setService(val));
field.onChange(val); }}
handleServiceChange(val); isLoading={servicesLoading}
}} />
isLoading={servicesLoading} )}
/> />
)}
/>
) : (
<h5>{assignedServices[0].name}</h5>
)
)} )}
</div> </div>
</div> </div>

View File

@ -34,7 +34,7 @@ const Teams = () => {
const [selectedEmployee, setSelectedEmployee] = useState(null); const [selectedEmployee, setSelectedEmployee] = useState(null);
const [deleteEmployee, setDeleteEmplyee] = useState(null); const [deleteEmployee, setDeleteEmplyee] = useState(null);
const [activeEmployee, setActiveEmployee] = useState(false); const [activeEmployee, setActiveEmployee] = useState(false);
const { control, watch } = useForm({ const { control, watch, setValue } = useForm({
defaultValues: { defaultValues: {
selectedService: "", selectedService: "",
searchTerm: "", searchTerm: "",
@ -136,6 +136,18 @@ const Teams = () => {
return () => eventBus.off("employee", employeeHandler); return () => eventBus.off("employee", employeeHandler);
}, [employeeHandler]); }, [employeeHandler]);
useEffect(() => {
if (!servicesLoading && assignedServices?.length === 1) {
const serviceId = assignedServices[0].id;
setValue("selectedService", serviceId, {
shouldDirty: true,
shouldValidate: true,
});
}
}, [assignedServices, servicesLoading, setValue]);
return ( return (
<> <>
{AssigTeam && ( {AssigTeam && (
@ -162,37 +174,30 @@ const Teams = () => {
<div className="card-body"> <div className="card-body">
<div className="row align-items-center justify-content-between mb-4 g-3"> <div className="row align-items-center justify-content-between mb-4 g-3">
<div className="col-md-6 col-12 d-flex flex-wrap align-items-center gap-3"> <div className="col-md-6 col-12 d-flex flex-wrap align-items-center gap-3">
{!servicesLoading && assignedServices && ( {!servicesLoading && assignedServices?.length > 0 && (
<> <div className="col-12 col-md-6 mb-2 text-start">
{assignedServices.length === 1 && ( <AppFormController
<h5 className="mb-2">{assignedServices[0].name}</h5> name="selectedService"
)} control={control}
render={({ field }) => (
{assignedServices.length > 1 && ( <SelectField
<div className="col-12 col-md-6 mb-2 text-start"> label="Select Service"
<AppFormController options={[ ...assignedServices]}
name="selectedService" placeholder="Choose a Service"
control={control} labelKey="name"
render={({ field }) => ( valueKey="id"
<SelectField value={field.value}
label="Select Service" onChange={field.onChange}
options={[{ id: "", name: "All Services" }, ...assignedServices]} isLoading={servicesLoading}
placeholder="Choose a Service" className="w-100"
labelKey="name"
valueKey="id"
value={field.value}
onChange={field.onChange}
isLoading={servicesLoading}
className="w-100"
/>
)}
/> />
</div> )}
)} />
</> </div>
)} )}
<div className="form-check form-switch d-flex align-items-center text-nowrap"> <div className="form-check form-switch d-flex align-items-center text-nowrap">
<input <input
type="checkbox" type="checkbox"

View File

@ -15,7 +15,7 @@ const TaskPlanning = () => {
const selectedProject = useSelectedProject(); const selectedProject = useSelectedProject();
const selectedService = useCurrentService(); const selectedService = useCurrentService();
const dispatch = useDispatch(); const dispatch = useDispatch();
const { control } = useForm({ const { control,setValue } = useForm({
defaultValues: { defaultValues: {
serviceFilter: selectedService ?? "" serviceFilter: selectedService ?? ""
}, },
@ -39,6 +39,20 @@ const TaskPlanning = () => {
return <div className="text-center py-5">Loading...</div>; return <div className="text-center py-5">Loading...</div>;
} }
useEffect(() => {
if (!servicesLoading && data?.length === 1) {
const serviceId = data[0].id;
setValue("serviceFilter", serviceId, {
shouldValidate: true,
shouldDirty: true,
});
dispatch(setService(serviceId));
}
}, [servicesLoading, data, setValue, dispatch]);
return ( return (
<div className="container-fluid"> <div className="container-fluid">
<Breadcrumb <Breadcrumb
@ -49,44 +63,31 @@ const TaskPlanning = () => {
/> />
<div className="card py-2 page-min-h"> <div className="card py-2 page-min-h">
<div className="col-sm-4 col-md-3 col-12 px-4 py-2 ms-1 text-start"> <div className="col-sm-4 col-md-3 col-12 px-4 py-2 text-start">
{/* When no services available */}
{data?.length === 0 ? ( {data?.length === 0 ? (
<p className="badge bg-label-secondary m-0"></p> <p className="badge bg-label-secondary m-0"></p>
) : ( ) : (
<> <AppFormController
{/* When exactly 1 service assigned → display heading */} name="serviceFilter"
{data?.length === 1 && ( control={control}
<h5 className="mb-3">{data[0].name}</h5> render={({ field }) => (
)} <SelectField
label="Services"
{/* When multiple services → show dropdown */} placeholder="All Services"
{data?.length > 1 && ( options={[{ id: "", name: "All Services" }, ...(data ?? [])]}
<AppFormController labelKey="name"
name="serviceFilter" valueKey="id"
control={control} isLoading={servicesLoading}
render={({ field }) => ( value={field.value}
<SelectField onChange={(val) => {
label="Select Services" field.onChange(val);
placeholder="All Services" dispatch(setService(val));
options={[{ id: "", name: "All Services" }, ...(data ?? [])]} }}
labelKey="name" className="m-0"
valueKey="id"
isLoading={servicesLoading}
value={field.value}
onChange={(val) => {
field.onChange(val);
dispatch(setService(val));
}}
className="m-0"
/>
)}
/> />
)} )}
</> />
)} )}
</div> </div>

View File

@ -46,7 +46,7 @@ const DailyProgrssReport = () => {
filter, filter,
}; };
const { control } = useForm({ const { control,setValue } = useForm({
defaultValues: { defaultValues: {
serviceFilter: "" serviceFilter: ""
} }
@ -85,6 +85,22 @@ const DailyProgrssReport = () => {
return updated; return updated;
}); });
}; };
useEffect(() => {
if (!isLoading && data?.length === 1) {
const serviceId = data[0].id;
// set form value
setValue("serviceFilter", serviceId, {
shouldDirty: true,
shouldValidate: true,
});
// set local state
setService(serviceId);
}
}, [isLoading, data, setValue]);
return ( return (
<div className="container-fluid"> <div className="container-fluid">
<DailyProgrssContext.Provider value={contextDispatcher}> <DailyProgrssContext.Provider value={contextDispatcher}>
@ -120,44 +136,31 @@ const DailyProgrssReport = () => {
/> />
<div className="card page-min-h p-5"> <div className="card page-min-h p-5">
<div className="text-start"> {data?.length > 0 && (
{/* Service Heading or Dropdown */} <div className="col-sm-4 col-md-3 col-12 text-start">
{!isLoading && data && ( <AppFormController
<> name="serviceFilter"
{/* If only 1 service assigned → show heading */} control={control}
{data.length === 1 && ( defaultValue={service ?? ""}
<h5 className="mb-3">{data[0].name}</h5> render={({ field }) => (
<SelectField
label="Services"
options={[{ id: "", name: "All Services" }, ...(data ?? [])]}
placeholder="Select Service"
labelKey="name"
valueKey="id"
isLoading={isLoading}
value={field.value}
onChange={(val) => {
field.onChange(val);
setService(val);
}}
className="m-0"
/>
)} )}
/>
{/* If multiple services → show dropdown */} </div>
{data.length > 1 && ( )}
<div className="col-12 col-md-3 mb-3 text-start">
<AppFormController
name="serviceFilter"
control={control}
defaultValue={service ?? ""}
render={({ field }) => (
<SelectField
label="Select Service"
options={[{ id: "", name: "All Services" }, ...data]}
placeholder="Choose a Service"
labelKey="name"
valueKey="id"
value={field.value}
isLoading={isLoading}
onChange={(val) => {
field.onChange(val);
setService(val);
}}
className="w-100"
/>
)}
/>
</div>
)}
</>
)}
</div>
<div> <div>
<TaskReportList filter={filter} <TaskReportList filter={filter}