Hide Project Dropdown When Only One Project Is Assigned to Employee #202
@ -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>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user