Hide Project Dropdown When Only One Project Is Assigned to Employee #202

Merged
vikas.nale merged 1 commits from Kartik_Bug#476 into Issue_Jun_2W 2025-06-12 05:28:49 +00:00
2 changed files with 113 additions and 71 deletions
Showing only changes of commit 3c44c18b95 - Show all commits

View File

@ -8,76 +8,97 @@ import WorkAreaModel from "../Project/Infrastructure/WorkAreaModel";
import TaskModel from "../Project/Infrastructure/TaskModel"; import TaskModel from "../Project/Infrastructure/TaskModel";
import ProjectRepository from "../../repositories/ProjectRepository"; import ProjectRepository from "../../repositories/ProjectRepository";
import Breadcrumb from "../../components/common/Breadcrumb"; import Breadcrumb from "../../components/common/Breadcrumb";
import {useProjectDetails, useProjects} from "../../hooks/useProjects"; import { useProjectDetails, useProjects } from "../../hooks/useProjects";
import {useHasUserPermission} from "../../hooks/useHasUserPermission"; import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import {MANAGE_PROJECT_INFRA} from "../../utils/constants"; import { MANAGE_PROJECT_INFRA } from "../../utils/constants";
import {useDispatch, useSelector} from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import {useProfile} from "../../hooks/useProfile"; import { useProfile } from "../../hooks/useProfile";
import {refreshData, setProjectId} from "../../slices/localVariablesSlice"; import { refreshData, setProjectId } from "../../slices/localVariablesSlice";
import InfraTable from "../Project/Infrastructure/InfraTable"; import InfraTable from "../Project/Infrastructure/InfraTable";
const InfraPlanning = () => const InfraPlanning = () => {
{ const { profile: LoggedUser } = useProfile()
const {profile: LoggedUser} = useProfile()
const dispatch = useDispatch() const dispatch = useDispatch()
const {projects,loading:project_listLoader,error:projects_error} = useProjects() const { projects, loading: project_listLoader, error: projects_error } = useProjects()
const selectedProject = useSelector((store)=>store.localVariables.projectId) const selectedProject = useSelector((store) => store.localVariables.projectId)
const ManageInfra = useHasUserPermission( MANAGE_PROJECT_INFRA ) const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA)
const {projects_Details, loading: project_deatilsLoader, error: project_error,refetch} = useProjectDetails( selectedProject ) const { projects_Details, loading: project_deatilsLoader, error: project_error, refetch } = useProjectDetails(selectedProject)
const reloadedData = useSelector( ( store ) => store.localVariables.reload ) const reloadedData = useSelector((store) => store.localVariables.reload)
useEffect( () => useEffect(() => {
{
dispatch(setProjectId(projects[0]?.id)) dispatch(setProjectId(projects[0]?.id))
}, [ projects ] ) }, [projects])
useEffect( () =>
{
if (reloadedData)
{
refetch()
dispatch( refreshData( false ) )
}
},[reloadedData]) useEffect(() => {
if (reloadedData) {
refetch()
dispatch(refreshData(false))
}
}, [reloadedData])
return ( return (
<div className="col-md-12 col-lg-12 col-xl-12 order-0 mb-4"> <div className="col-md-12 col-lg-12 col-xl-12 order-0 mb-4">
<div className="card"> <div className="card">
<div className="card-body" style={{ padding: "0.5rem" }}> <div className="card-body" style={{ padding: "0.5rem" }}>
<div className="align-items-center"> <div className="align-items-center">
<div className="row "> <div className="row ">
<div className="col-sm-3 col-8 text-start mb-1"> <div className="col-sm-3 col-8 text-start mb-1">
<select name="DataTables_Table_0_length" {project_listLoader ? (
aria-controls="DataTables_Table_0" <select
className="form-select form-select-sm" name="project_select"
value={selectedProject} className="form-select form-select-sm"
onChange={(e)=>dispatch(setProjectId(e.target.value))} value=""
aria-label="" disabled
> >
{(project_listLoader || projects.length < 0) && <option value="Loading..." disabled>Loading...</option> } <option value="">Loading Projects...</option>
</select>
{!project_listLoader && projects?.map((project)=>( ) : projects.length === 0 ? (
<option key={project.id} value={project.id}>{project.name}</option> <input
))} type="text"
</select> className="form-control form-control-sm text-danger"
value="No projects assigned."
readOnly
/>
) : projects.length === 1 ? (
<input
type="text"
className="form-control form-control-sm"
value={projects[0].name}
readOnly
/>
) : (
<select
name="project_select"
className="form-select form-select-sm"
value={selectedProject || ""}
onChange={(e) => dispatch(setProjectId(e.target.value))}
>
{projects.map((project) => (
<option value={project.id} key={project.id}>
{project.name}
</option>
))}
</select>
)}
</div> </div>
</div> </div>
<div className="row "> <div className="row ">
{project_deatilsLoader && ( <p>Loading...</p> )} {project_deatilsLoader && (<p>Loading...</p>)}
{( !project_deatilsLoader && projects_Details?.buildings.length === 0 ) && ( <p>No Result Found</p> )} {(!project_deatilsLoader && projects_Details?.buildings.length === 0) && (<p>No Result Found</p>)}
{(!project_deatilsLoader && projects_Details?.buildings?.length > 0) && (<InfraTable buildings={projects_Details?.buildings}/>)}
{(!project_deatilsLoader && projects_Details?.buildings?.length > 0) && (<InfraTable buildings={projects_Details?.buildings} />)}
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
); );
}; };

View File

@ -240,40 +240,61 @@ const DailyTask = () => {
DateDifference="6" DateDifference="6"
dateFormat="DD-MM-YYYY" dateFormat="DD-MM-YYYY"
/> />
{/* FilterIcon component now manages its own filter states and logic */}
<FilterIcon <FilterIcon
taskListData={TaskList} // Pass the raw TaskList to FilterIcon taskListData={TaskList}
onApplyFilters={setFilters} // Callback to receive the filtered states from FilterIcon onApplyFilters={setFilters}
currentSelectedBuilding={filters.selectedBuilding} currentSelectedBuilding={filters.selectedBuilding}
currentSelectedFloors={filters.selectedFloors} currentSelectedFloors={filters.selectedFloors}
currentSelectedActivities={filters.selectedActivities} currentSelectedActivities={filters.selectedActivities}
// You can pass the project_loading state here if you want to disable filter during project load
// isProjectLoading={project_loading}
/> />
</div> </div>
<div className="col-md-4 col-12 text-center mb-2 mb-md-0"> <div className="col-md-4 col-12 text-center mb-2 mb-md-0">
<select {project_loading ? (
name="project_select" <select
aria-controls="DataTables_Table_0" name="project_select"
className="form-select form-select-sm" aria-controls="DataTables_Table_0"
value={selectedProject || ""} className="form-select form-select-sm"
onChange={handleProjectChange} value={selectedProject || ""}
aria-label="Select Project" onChange={handleProjectChange}
disabled={project_loading} // Disable dropdown while projects are loading aria-label="Select Project"
> disabled={true}
{project_loading && ( >
<option value="" disabled> <option value="" disabled>
Loading Projects... Loading Projects...
</option> </option>
)} </select>
{!project_loading && ) : projects.length === 0 ? (
projects && <input
projects?.map((project) => ( type="text"
className="form-control form-control-sm "
value="No projects assigned."
readOnly
aria-label="No projects assigned"
/>
) : projects.length === 1 ? (
<input
type="text"
className="form-control form-control-sm"
value={projects[0].name}
readOnly
aria-label="Assigned Project"
/>
) : (
<select
name="project_select"
aria-controls="DataTables_Table_0"
className="form-select form-select-sm"
value={selectedProject || ""}
onChange={handleProjectChange}
aria-label="Select Project"
>
{projects?.map((project) => (
<option value={project.id} key={project.id}> <option value={project.id} key={project.id}>
{project.name} {project.name}
</option> </option>
))} ))}
</select> </select>
)}
</div> </div>
</div> </div>
<div className="table-responsive text-nowrap mt-3"> <div className="table-responsive text-nowrap mt-3">