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 } =
useProjectAssignedServices(projectId);
const { control } = useForm({
const { control, setValue } = useForm({
defaultValues: {
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 (
<>
{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="ms-4 mt-n1">
{!servicesLoading && assignedServices?.length > 0 && (
assignedServices.length > 1 ? (
<AppFormController
name="serviceId"
control={control}
render={({ field }) => (
<SelectField
label="Select Service"
options={[{ id: "", name: "All Services" }, ...(assignedServices ?? [])]}
placeholder="Choose a Service"
labelKey="name"
valueKey="id"
value={field.value}
onChange={(val) => {
field.onChange(val);
handleServiceChange(val);
}}
isLoading={servicesLoading}
/>
)}
/>
) : (
<h5>{assignedServices[0].name}</h5>
)
<AppFormController
name="serviceId"
control={control}
render={({ field }) => (
<SelectField
label="Select Service"
options={[...(assignedServices ?? [])]}
placeholder="Choose a Service"
labelKey="name"
valueKey="id"
value={field.value}
onChange={(val) => {
field.onChange(val);
dispatch(setService(val));
}}
isLoading={servicesLoading}
/>
)}
/>
)}
</div>
</div>

View File

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

View File

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

View File

@ -46,7 +46,7 @@ const DailyProgrssReport = () => {
filter,
};
const { control } = useForm({
const { control,setValue } = useForm({
defaultValues: {
serviceFilter: ""
}
@ -85,6 +85,22 @@ const DailyProgrssReport = () => {
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 (
<div className="container-fluid">
<DailyProgrssContext.Provider value={contextDispatcher}>
@ -120,44 +136,31 @@ const DailyProgrssReport = () => {
/>
<div className="card page-min-h p-5">
<div className="text-start">
{/* Service Heading or Dropdown */}
{!isLoading && data && (
<>
{/* If only 1 service assigned → show heading */}
{data.length === 1 && (
<h5 className="mb-3">{data[0].name}</h5>
{data?.length > 0 && (
<div className="col-sm-4 col-md-3 col-12 text-start">
<AppFormController
name="serviceFilter"
control={control}
defaultValue={service ?? ""}
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 */}
{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}