diff --git a/src/components/Project/Infrastructure/Floor.jsx b/src/components/Project/Infrastructure/Floor.jsx index 0f7f00f7..2ee5d84b 100644 --- a/src/components/Project/Infrastructure/Floor.jsx +++ b/src/components/Project/Infrastructure/Floor.jsx @@ -1,6 +1,6 @@ import React from "react"; import WorkArea from "./WorkArea"; -const Floor = ({ floor, workAreas, forBuilding,serviceId }) => { +const Floor = ({ floor, workAreas, forBuilding }) => { return ( {workAreas && workAreas.length > 0 ? ( @@ -10,7 +10,6 @@ const Floor = ({ floor, workAreas, forBuilding,serviceId }) => { key={workArea.id} workArea={workArea} floor={floor} - serviceId={serviceId} /> )) ) : ( diff --git a/src/components/Project/Infrastructure/InfraTable.jsx b/src/components/Project/Infrastructure/InfraTable.jsx index 3805857f..cb6b6cb0 100644 --- a/src/components/Project/Infrastructure/InfraTable.jsx +++ b/src/components/Project/Infrastructure/InfraTable.jsx @@ -11,7 +11,7 @@ import { getCachedData, } from "../../../slices/apiDataManager"; -const InfraTable = ({ buildings, projectId, serviceId }) => { +const InfraTable = ({ buildings, projectId }) => { const [projectBuilding, setProjectBuilding] = useState([]); const [expandedBuildings, setExpandedBuildings] = useState([]); const [showFloorModal, setShowFloorModal] = useState(false); @@ -90,7 +90,6 @@ const InfraTable = ({ buildings, projectId, serviceId }) => { forBuilding={building} floor={floor} workAreas={floor.workAreas} - serviceId={serviceId} /> )) ) : ( diff --git a/src/components/Project/Infrastructure/WorkArea.jsx b/src/components/Project/Infrastructure/WorkArea.jsx index b6fc3e35..c38af26d 100644 --- a/src/components/Project/Infrastructure/WorkArea.jsx +++ b/src/components/Project/Infrastructure/WorkArea.jsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import WorkItem from "./WorkItem"; -import { useProjectDetails, useProjectTasks } from "../../../hooks/useProjects"; -import { cacheData } from "../../../slices/apiDataManager"; +import { useCurrentService, useProjectDetails, useProjectTasks } from "../../../hooks/useProjects"; +import { cacheData, useSelectedProject } from "../../../slices/apiDataManager"; import { useDispatch, useSelector } from "react-redux"; import { refreshData } from "../../../slices/localVariablesSlice"; import ProjectRepository from "../../../repositories/ProjectRepository"; @@ -15,9 +15,11 @@ import { import { useParams } from "react-router-dom"; import ProgressBar from "../../common/ProgressBar"; import {formatNumber} from "../../../utils/dateUtils"; +import { useServices } from "../../../hooks/masterHook/useMaster"; -const WorkArea = ({ workArea, floor, forBuilding,serviceId = null }) => { - const selectedProject = useSelector((store) => store.localVariables.projectId); +const WorkArea = ({ workArea, floor, forBuilding }) => { + const selectedProject = useSelectedProject() + const selectedService = useCurrentService() const { projects_Details, loading } = useProjectDetails(selectedProject); const [IsExpandedArea, setIsExpandedArea] = useState(false); const dispatch = useDispatch(); @@ -25,8 +27,7 @@ const WorkArea = ({ workArea, floor, forBuilding,serviceId = null }) => { const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA); const ManageAndAssignTak = useHasUserPermission(ASSIGN_REPORT_TASK); - - const { ProjectTaskList, isLoading } = useProjectTasks(workArea.id,serviceId, IsExpandedArea); + const { ProjectTaskList, isLoading } = useProjectTasks(workArea.id,selectedService, IsExpandedArea); const [workAreaStatus, setWorkAreaStatus] = useState({ completed: 0, diff --git a/src/components/Project/ProjectInfra.jsx b/src/components/Project/ProjectInfra.jsx index cd7fafbc..29a0b283 100644 --- a/src/components/Project/ProjectInfra.jsx +++ b/src/components/Project/ProjectInfra.jsx @@ -17,33 +17,37 @@ import { getCachedData, useSelectedProject, } from "../../slices/apiDataManager"; -import { useProjectAssignedServices, useProjectDetails, useProjectInfra } from "../../hooks/useProjects"; +import { + useCurrentService, + useProjectAssignedServices, + useProjectDetails, + useProjectInfra, +} from "../../hooks/useProjects"; import { useDispatch, useSelector } from "react-redux"; import { refreshData } from "../../slices/localVariablesSlice"; import eventBus from "../../services/eventBus"; import { useParams } from "react-router-dom"; import GlobalModel from "../common/GlobalModel"; +import { setService } from "../../slices/globalVariablesSlice"; const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => { const projectId = useSelectedProject(); + const selectedService = useCurrentService(); const reloadedData = useSelector((store) => store.localVariables.reload); const [expandedBuildings, setExpandedBuildings] = useState([]); - const { projectInfra, isLoading, error } = useProjectInfra(projectId) + const { projectInfra, isLoading, error } = useProjectInfra(projectId); const { projects_Details, refetch, loading } = useProjectDetails(data?.id); const [project, setProject] = useState(projects_Details); const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA); - const ManageTask = useHasUserPermission(MANAGE_TASK) + const ManageTask = useHasUserPermission(MANAGE_TASK); const [showModalFloor, setshowModalFloor] = useState(false); const [showModalWorkArea, setshowModalWorkArea] = useState(false); const [showModalTask, setshowModalTask] = useState(false); const [showModalBuilding, setshowModalBuilding] = useState(false); const dispatch = useDispatch(); - const { data: assignedServices, isLoading: servicesLoading } = useProjectAssignedServices(projectId); + const { data: assignedServices, isLoading: servicesLoading } = + useProjectAssignedServices(projectId); - const [selectedService, setSelectedService] = useState(""); - const handleServiceChange = (e) => { - setSelectedService(e.target.value); - }; useEffect(() => { setProject(projectInfra); @@ -51,34 +55,58 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => { const signalRHandler = (response) => { setProject(response); - } + }; return ( <> - {showModalBuilding && setshowModalBuilding(false)}> - setshowModalBuilding(false)} - /> - } - {showModalFloor && setshowModalFloor(false)}> - setshowModalFloor(false)} - /> - } - {showModalWorkArea && setshowModalWorkArea(false)} > - setshowModalWorkArea(false)} - /> - } - {showModalTask && ( setshowModalTask(false)}> - setshowModalTask(false)} - /> - )} + {showModalBuilding && ( + setshowModalBuilding(false)} + > + setshowModalBuilding(false)} + /> + + )} + {showModalFloor && ( + setshowModalFloor(false)} + > + setshowModalFloor(false)} + /> + + )} + {showModalWorkArea && ( + setshowModalWorkArea(false)} + > + setshowModalWorkArea(false)} + /> + + )} + {showModalTask && ( + setshowModalTask(false)} + > + setshowModalTask(false)} + /> + + )}
@@ -88,8 +116,9 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => { className="dataTables_length text-start py-2 px-6 col-md-4 col-12" id="DataTables_Table_0_length" > - {!servicesLoading && assignedServices?.length > 0 && ( - assignedServices.length > 1 ? ( + {!servicesLoading && + assignedServices?.length > 0 && + (assignedServices.length > 1 ? ( - ) : ( -
{assignedServices[0].name}
- ) - )} -
-
- - {/* --- Right: DateRangePicker --- */} -
- - -
- -
- {/* --- Table --- */} -
- - - - - - - - - - - - - {taskLoading && ( - - - - )} - {!taskLoading && groupedTasks.length === 0 && ( - - - - )} - {!taskLoading && - groupedTasks.map(({ date, tasks }) => ( - - - - - {tasks.map((task, idx) => ( - - - - - - - - - ))} - - ))} - -
ActivityAssignedCompletedAssign OnTeamActions
- -
- No reports available for the selected date range. -
{formatUTCToLocalTime(date)}
-
{task.workItem.activityMaster?.activityName || "No Activity Name"}
-
- {task.workItem.workArea?.floor?.building?.name} › {task.workItem.workArea?.floor?.floorName} › {task.workItem.workArea?.areaName} -
-
{formatNumber(task.plannedTask)} / {formatNumber(task.workItem.plannedWork - task.workItem.completedWork)}{task.completedTask}{formatUTCToLocalTime(task.assignmentDate)}{renderTeamMembers(task, idx)} -
- {ReportTaskRights && !task.reportedDate && ( - - )} - {ApprovedTaskRights && task.reportedDate && !task.approvedBy && ( - - )} - -
-
-
- - - - - ); -}; -export default DailyTask; \ No newline at end of file diff --git a/src/pages/Activities/TaskPlannng.jsx b/src/pages/Activities/TaskPlannng.jsx index c9356dfd..e3e74f9c 100644 --- a/src/pages/Activities/TaskPlannng.jsx +++ b/src/pages/Activities/TaskPlannng.jsx @@ -1,32 +1,34 @@ import React, { useEffect, useState } from "react"; import Breadcrumb from "../../components/common/Breadcrumb"; import InfraPlanning from "../../components/Activities/InfraPlanning"; -import { useProjectName } from "../../hooks/useProjects"; +import { useCurrentService, useProjectName } from "../../hooks/useProjects"; import { useDispatch } from "react-redux"; import { setProjectId } from "../../slices/localVariablesSlice"; import { useSelectedProject } from "../../slices/apiDataManager"; import { useProjectAssignedServices } from "../../hooks/useProjects"; +import { setService } from "../../slices/globalVariablesSlice"; -const TaskPlannng = () => { +const TaskPlanning = () => { const selectedProject = useSelectedProject(); + const selectedService = useCurrentService(); const dispatch = useDispatch(); + const { projectNames = [], loading: projectLoading } = useProjectName(); - // Service dropdown state - const { data: assignedServices, isLoading: servicesLoading } = + const { data, isLoading: servicesLoading } = useProjectAssignedServices(selectedProject); - const [selectedService, setSelectedService] = useState(""); + // Set default project if none selected useEffect(() => { - if (!selectedProject && projectNames?.length > 0) { + if (!selectedProject && projectNames.length > 0) { dispatch(setProjectId(projectNames[0]?.id)); } }, [projectNames, selectedProject, dispatch]); - const handleServiceChange = (e) => { - setSelectedService(e.target.value); - }; - + // Loading state + if (projectLoading) { + return
Loading...
; + } return (
{ ]} /> -
-
- {/* Service Dropdown */} - -
- {!servicesLoading && assignedServices?.length > 0 && ( - assignedServices.length > 1 ? ( - - ) : ( -
{assignedServices[0].name}
- ) - )} -
- - - {/* Infra Planning Component */} - {selectedProject ? ( - +
+
+ {data?.length === 0 ? ( +

Service not assigned

) : ( -
Please Select Project
+ )}
+ + {/* Planning Component */} + {selectedProject ? ( + + ) : ( +
Please select a project
+ )}
); }; -export default TaskPlannng; +export default TaskPlanning; diff --git a/src/pages/DailyProgressReport/DailyProgrssReport.jsx b/src/pages/DailyProgressReport/DailyProgrssReport.jsx index 72b360b4..79147d5a 100644 --- a/src/pages/DailyProgressReport/DailyProgrssReport.jsx +++ b/src/pages/DailyProgressReport/DailyProgrssReport.jsx @@ -83,7 +83,7 @@ const DailyProgrssReport = () => {