diff --git a/src/components/Charts/LineChart.jsx b/src/components/Charts/LineChart.jsx index 1dc1b1ac..6eb4840c 100644 --- a/src/components/Charts/LineChart.jsx +++ b/src/components/Charts/LineChart.jsx @@ -117,7 +117,7 @@ const LineChart = ({ return ( -
Progress Overview by Project
- {selectedProjectName} -
- )} -
{" "}
diff --git a/src/pages/Activities/DailyTask.jsx b/src/pages/Activities/DailyTask.jsx
index fb121a89..a545736f 100644
--- a/src/pages/Activities/DailyTask.jsx
+++ b/src/pages/Activities/DailyTask.jsx
@@ -2,7 +2,7 @@ import React, { useEffect, useState, useRef } from "react";
import { useDispatch, useSelector } from "react-redux";
import Breadcrumb from "../../components/common/Breadcrumb";
import { useTaskList } from "../../hooks/useTasks";
-import { useProjects } from "../../hooks/useProjects";
+import { useProjectName, useProjects } from "../../hooks/useProjects";
import { setProjectId } from "../../slices/localVariablesSlice";
import { ReportTask } from "../../components/Activities/ReportTask";
import ReportTaskComments from "../../components/Activities/ReportTaskComments";
@@ -18,11 +18,11 @@ import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import { APPROVE_TASK, ASSIGN_REPORT_TASK } from "../../utils/constants";
const DailyTask = () => {
- const [searchParams] = useSearchParams();
- const projectIdFromUrl = searchParams.get("project");
const selectedProject = useSelector(
(store) => store.localVariables.projectId
);
+ const dispatch = useDispatch()
+ const { projectNames, loading: projectLoading, fetchData } = useProjectName();
const [filters, setFilters] = useState({
@@ -48,7 +48,11 @@ const DailyTask = () => {
dateRange?.endDate || null
);
-
+ useEffect(() => {
+ if(selectedProject == null){
+ dispatch(setProjectId(projectNames[0]?.id));
+ }
+ },[])
const [TaskLists, setTaskLists] = useState([]);
const [dates, setDates] = useState([]);
const popoverRefs = useRef([]);
diff --git a/src/pages/Activities/TaskPlannng.jsx b/src/pages/Activities/TaskPlannng.jsx
index c2b2f8da..57bd9506 100644
--- a/src/pages/Activities/TaskPlannng.jsx
+++ b/src/pages/Activities/TaskPlannng.jsx
@@ -1,9 +1,23 @@
-import React from "react";
+import React,{useEffect} from "react";
import Breadcrumb from "../../components/common/Breadcrumb";
import InfraPlanning from "../../components/Activities/InfraPlanning";
+import { useProjectName } from "../../hooks/useProjects";
+import { useDispatch, useSelector } from "react-redux";
+import { setProjectId } from "../../slices/localVariablesSlice";
const TaskPlannng = () => {
+ const selectedProject = useSelector(
+ (store) => store.localVariables.projectId
+ );
+
+ const dispatch = useDispatch()
+ const { projectNames, loading: projectLoading, fetchData } = useProjectName();
+ useEffect(() => {
+ if(selectedProject == null){
+ dispatch(setProjectId(projectNames[0]?.id));
+ }
+ },[])
return (
<>
diff --git a/src/pages/Gallary/ImageGallary.jsx b/src/pages/Gallary/ImageGallary.jsx
index eb7bd8ad..6d4bd961 100644
--- a/src/pages/Gallary/ImageGallary.jsx
+++ b/src/pages/Gallary/ImageGallary.jsx
@@ -1,7 +1,7 @@
import React, { useState, useEffect, useRef, useCallback } from "react";
import "./ImageGallery.css";
import moment from "moment";
-import { useSelector } from "react-redux";
+import { useDispatch, useSelector } from "react-redux";
import { useModal } from "./ModalContext";
import ImagePop from "./ImagePop";
import Avatar from "../../components/common/Avatar";
@@ -10,11 +10,22 @@ import eventBus from "../../services/eventBus";
import Breadcrumb from "../../components/common/Breadcrumb";
import { formatUTCToLocalTime } from "../../utils/dateUtils";
import useImageGallery from "../../hooks/useImageGallery";
+import { useProjectName } from "../../hooks/useProjects";
+import { setProjectId } from "../../slices/localVariablesSlice";
const SCROLL_THRESHOLD = 5;
const ImageGallery = () => {
const selectedProjectId = useSelector((store) => store.localVariables.projectId);
+
+ const dispatch = useDispatch()
+ const { projectNames, loading: projectLoading, fetchData } = useProjectName();
+ useEffect(() => {
+ if(selectedProjectId == null){
+ dispatch(setProjectId(projectNames[0]?.id));
+ }
+ },[])
+
const {
images,
allImagesData,
diff --git a/src/pages/employee/EmployeeList.jsx b/src/pages/employee/EmployeeList.jsx
index 002d77d4..09a820da 100644
--- a/src/pages/employee/EmployeeList.jsx
+++ b/src/pages/employee/EmployeeList.jsx
@@ -5,11 +5,19 @@ import { Link, NavLink, useNavigate } from "react-router-dom";
import Avatar from "../../components/common/Avatar";
import Breadcrumb from "../../components/common/Breadcrumb";
import ManageEmp from "../../components/Employee/ManageRole";
-import { useEmployeesAllOrByProjectId, useSuspendEmployee } from "../../hooks/useEmployees";
-import { useProjects } from "../../hooks/useProjects";
+import {
+ useEmployeesAllOrByProjectId,
+ useSuspendEmployee,
+} from "../../hooks/useEmployees";
+import { useProjectName, useProjects } from "../../hooks/useProjects";
import { useProfile } from "../../hooks/useProfile";
import { hasUserPermission } from "../../utils/authUtils";
-import { ITEMS_PER_PAGE, MANAGE_EMPLOYEES, VIEW_ALL_EMPLOYEES, VIEW_TEAM_MEMBERS } from "../../utils/constants";
+import {
+ ITEMS_PER_PAGE,
+ MANAGE_EMPLOYEES,
+ VIEW_ALL_EMPLOYEES,
+ VIEW_TEAM_MEMBERS,
+} from "../../utils/constants";
import { clearCacheKey } from "../../slices/apiDataManager";
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import SuspendEmp from "../../components/Employee/SuspendEmp"; // Keep if you use SuspendEmp
@@ -22,16 +30,20 @@ import {
import EmployeeRepository from "../../repositories/EmployeeRepository";
import ManageEmployee from "../../components/Employee/ManageEmployee";
import ConfirmModal from "../../components/common/ConfirmModal";
-import { useSelector } from "react-redux";
+import { useDispatch, useSelector } from "react-redux";
import eventBus from "../../services/eventBus";
import { newlineChars } from "pdf-lib";
import GlobalModel from "../../components/common/GlobalModel";
import usePagination from "../../hooks/usePagination";
+import { setProjectId } from "../../slices/localVariablesSlice";
const EmployeeList = () => {
const selectedProjectId = useSelector(
(store) => store.localVariables.projectId
);
+ const { projectNames, loading: projectLoading, fetchData } = useProjectName();
+
+ const dispatch = useDispatch();
const [showInactive, setShowInactive] = useState(false);
const [showAllEmployees, setShowAllEmployees] = useState(false);
@@ -44,8 +56,8 @@ const EmployeeList = () => {
);
const [employeeList, setEmployeeList] = useState([]);
- const [ modelConfig, setModelConfig ] = useState();
- const [EmpForManageRole,setEmpForManageRole] = useState(null)
+ const [modelConfig, setModelConfig] = useState();
+ const [EmpForManageRole, setEmpForManageRole] = useState(null);
// const [currentPage, setCurrentPage] = useState(1);
// const [itemsPerPage] = useState(ITEMS_PER_PAGE);
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
@@ -55,117 +67,70 @@ const EmployeeList = () => {
const [selectedEmployeeId, setSelecedEmployeeId] = useState(null);
const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
const [selectedEmpFordelete, setSelectedEmpFordelete] = useState(null);
- const [ employeeLodaing, setemployeeLodaing ] = useState( false );
- const ViewTeamMember = useHasUserPermission(VIEW_TEAM_MEMBERS)
- const ViewAllEmployee = useHasUserPermission(VIEW_ALL_EMPLOYEES)
- const {
- mutate: suspendEmployee,
- isPending: empLodaing
-} = useSuspendEmployee({
- setIsDeleteModalOpen,
- setemployeeLodaing
-} );
-
-
+ const [employeeLodaing, setemployeeLodaing] = useState(false);
+ const ViewTeamMember = useHasUserPermission(VIEW_TEAM_MEMBERS);
+ const ViewAllEmployee = useHasUserPermission(VIEW_ALL_EMPLOYEES);
+ const { mutate: suspendEmployee, isPending: empLodaing } = useSuspendEmployee(
+ {
+ setIsDeleteModalOpen,
+ setemployeeLodaing,
+ }
+ );
+ useEffect(() => {
+ if (selectedProjectId === null) {
+ dispatch(setProjectId(projectNames[0]?.id));
+ }
+ }, [selectedProjectId]);
const navigate = useNavigate();
-
const applySearchFilter = (data, text) => {
- if (!text) {
- return data;
- }
+ if (!text) {
+ return data;
+ }
- const lowercasedText = text.toLowerCase().trim();
+ const lowercasedText = text.toLowerCase().trim();
- return data.filter((item) => {
- const firstName = item.firstName || "";
- const middleName = item.middleName || "";
- const lastName = item.lastName || "";
+ return data.filter((item) => {
+ const firstName = item.firstName || "";
+ const middleName = item.middleName || "";
+ const lastName = item.lastName || "";
- const fullName = `${firstName} ${middleName} ${lastName}`
- .toLowerCase()
- .trim()
- .replace(/\s+/g, " ");
+ const fullName = `${firstName} ${middleName} ${lastName}`
+ .toLowerCase()
+ .trim()
+ .replace(/\s+/g, " ");
- const email = item.email?.toLowerCase() || "";
- const phoneNumber = item.phoneNumber?.toLowerCase() || "";
- const jobRole = item.jobRole?.toLowerCase() || "";
-
- return (
- fullName.includes(lowercasedText) ||
- email.includes(lowercasedText) ||
- phoneNumber.includes(lowercasedText) ||
- jobRole.includes(lowercasedText)
- );
- });
-};
+ const email = item.email?.toLowerCase() || "";
+ const phoneNumber = item.phoneNumber?.toLowerCase() || "";
+ const jobRole = item.jobRole?.toLowerCase() || "";
+ return (
+ fullName.includes(lowercasedText) ||
+ email.includes(lowercasedText) ||
+ phoneNumber.includes(lowercasedText) ||
+ jobRole.includes(lowercasedText)
+ );
+ });
+ };
const handleSearch = (e) => {
const value = e.target.value;
setSearchText(value);
setCurrentPage(1);
};
-useEffect(() => {
- const filtered = applySearchFilter(employeeList, searchText);
- setFilteredData(filtered);
-}, [searchText, employeeList]);
-
- const displayData = searchText ? filteredData : employeeList;
- const { currentPage, totalPages, currentItems, paginate,setCurrentPage } = usePagination(
- displayData,
- ITEMS_PER_PAGE
- );
- const openModal = () => {
+ const displayData = searchText ? filteredData : employeeList;
+ const { currentPage, totalPages, currentItems, paginate, setCurrentPage } =
+ usePagination(displayData, ITEMS_PER_PAGE);
+ const openModal = () => {
setIsCreateModalOpen(true);
- };
-
-useEffect(() => {
- if (!loading && Array.isArray(employees)) {
- const sorted = [...employees].sort((a, b) => {
- const nameA = `${a.firstName || ""}${a.middleName || ""}${a.lastName || ""}`.toLowerCase();
- const nameB = `${b.firstName || ""}${b.middleName || ""}${b.lastName || ""}`.toLowerCase();
- return nameA?.localeCompare(nameB);
- });
-
- setEmployeeList((prevList) => {
- const prevJSON = JSON.stringify(prevList);
- const nextJSON = JSON.stringify(sorted);
- if (prevJSON !== nextJSON) {
- return sorted;
- }
- return prevList;
- });
-
- setFilteredData((prev) => {
- const prevJSON = JSON.stringify(prev);
- const nextJSON = JSON.stringify(sorted);
- if (prevJSON !== nextJSON) {
- return sorted;
- }
- return prev;
- });
-
- // set currentPage to 1 only if needed
- setCurrentPage((prevPage) => (prevPage !== 1 ? 1 : prevPage));
- }
-}, [loading, employees, selectedProjectId, showAllEmployees]);
-
-
-
+ };
const handleConfigData = (config) => {
setModelConfig(config);
};
- // useEffect(() => {
- // if (modelConfig !== null) {
- // openModal();
- // }
- // }, [modelConfig, isCreateModalOpen]);
-
const tableRef = useRef(null);
const handleExport = (type) => {
if (!currentItems || currentItems.length === 0) return;
@@ -190,15 +155,17 @@ useEffect(() => {
const handleToggle = (e) => {
setShowInactive(e.target.checked);
- recallEmployeeData(e.target.checked, showAllEmployees ? null : selectedProjectId); // Use selectedProjectId here
+ recallEmployeeData(
+ e.target.checked,
+ showAllEmployees ? null : selectedProjectId
+ ); // Use selectedProjectId here
};
-const handleAllEmployeesToggle = (e) => {
- const isChecked = e.target.checked;
- setShowInactive(false);
- setShowAllEmployees(isChecked);
-
-};
+ const handleAllEmployeesToggle = (e) => {
+ const isChecked = e.target.checked;
+ setShowInactive(false);
+ setShowAllEmployees(isChecked);
+ };
const handleEmployeeModel = (id) => {
setSelecedEmployeeId(id);
@@ -209,6 +176,43 @@ const handleAllEmployeesToggle = (e) => {
setSelectedEmpFordelete(employee);
setIsDeleteModalOpen(true);
};
+ useEffect(() => {
+ const filtered = applySearchFilter(employeeList, searchText);
+ setFilteredData(filtered);
+ }, [searchText, employeeList]);
+ useEffect(() => {
+ if (!loading && Array.isArray(employees)) {
+ const sorted = [...employees].sort((a, b) => {
+ const nameA = `${a.firstName || ""}${a.middleName || ""}${
+ a.lastName || ""
+ }`.toLowerCase();
+ const nameB = `${b.firstName || ""}${b.middleName || ""}${
+ b.lastName || ""
+ }`.toLowerCase();
+ return nameA?.localeCompare(nameB);
+ });
+
+ setEmployeeList((prevList) => {
+ const prevJSON = JSON.stringify(prevList);
+ const nextJSON = JSON.stringify(sorted);
+ if (prevJSON !== nextJSON) {
+ return sorted;
+ }
+ return prevList;
+ });
+
+ setFilteredData((prev) => {
+ const prevJSON = JSON.stringify(prev);
+ const nextJSON = JSON.stringify(sorted);
+ if (prevJSON !== nextJSON) {
+ return sorted;
+ }
+ return prev;
+ });
+
+ setCurrentPage((prevPage) => (prevPage !== 1 ? 1 : prevPage));
+ }
+ }, [loading, employees, selectedProjectId, showAllEmployees]);
useEffect(() => {
if (!showAllEmployees) {
@@ -218,36 +222,49 @@ const handleAllEmployeesToggle = (e) => {
const handler = useCallback(
(msg) => {
- if(employees.some((item) => item.id == msg.employeeId)){
+ if (employees.some((item) => item.id == msg.employeeId)) {
setEmployeeList([]);
- recallEmployeeData(showInactive, showAllEmployees ? null : selectedProjectId); // Use selectedProjectId here
+ recallEmployeeData(
+ showInactive,
+ showAllEmployees ? null : selectedProjectId
+ ); // Use selectedProjectId here
}
- },[employees, showInactive, showAllEmployees, selectedProjectId] // Add all relevant dependencies
+ },
+ [employees, showInactive, showAllEmployees, selectedProjectId] // Add all relevant dependencies
);
useEffect(() => {
- eventBus.on("employee",handler);
- return () => eventBus.off("employee",handler)
- },[handler])
-
+ eventBus.on("employee", handler);
+ return () => eventBus.off("employee", handler);
+ }, [handler]);
return (
<>
{EmpForManageRole && (
- Loading... Loading... Access Denied: You don't have permission to perform this action. !
+ Access Denied: You don't have permission to perform this action.
+ !
+ Loading....
-
-
- {/* Pagination */}
- {!loading && displayData.length > ITEMS_PER_PAGE && (
-
+ )}
+
-
-
-
- {loading && (
-
-
-
-
-
-
-
-
-
-
- Joining Date
-
-
- Status
-
-
- Actions
-
-
-
- )}
- {/* Conditional messages for no data or no search results */}
- {!loading && displayData?.length === 0 && searchText && !showAllEmployees ? (
-
-
-
-
- ) : null}
- {!loading && displayData?.length === 0 && (!searchText || showAllEmployees) ? (
-
-
- '{searchText}' employee not found
- {" "}
-
-
-
+ ))}
+
+
+
+ Export
+
+
+
+
+
+ {/* Add Employee Button */}
+ {Manage_Employee && (
+
+ )}
+
+
+
+
+
+
+
+
- ) : null}
-
- {/* Render current items */}
- {currentItems && !loading && currentItems.map((item) => (
-
+
+
+
+
+
+
+
+
+
+ Joining Date
+
+
+ Status
+
+
+ Actions
+
-
+
+ {loading && (
+
-
-
-
- {item.email ? (
-
-
- {item.email}
-
- ) : (
-
- NA
-
- )}
-
-
-
-
- {item.phoneNumber}
-
-
-
-
-
- {item.jobRole || "Not Assign Yet"}
-
-
-
-
- {moment(item.joiningDate)?.format("DD-MMM-YYYY")}
+
+
+ )}
+ {/* Conditional messages for no data or no search results */}
+ {!loading &&
+ displayData?.length === 0 &&
+ searchText &&
+ !showAllEmployees ? (
+
+
-
- {showInactive ? (
-
- Inactive
-
- ) : (
-
- Active
-
- )}
+
+
-
+
+ '{searchText}' employee not found
+ {" "}
- {Manage_Employee && (
-
-
+ {item.email ? (
+
+
+ {item.email}
+
+ ) : (
+
+ NA
+
+ )}
+
+
+
+
+ {item.phoneNumber}
+
+
+
+
+
+ {item.jobRole || "Not Assign Yet"}
+
+
-
+
+ {moment(item.joiningDate)?.format("DD-MMM-YYYY")}
+
+
+ {showInactive ? (
+
+ Inactive
+
+ ) : (
+
+ Active
+
+ )}
+
+ {Manage_Employee && (
+
+
+ )}
+
navigate(`/projects/${projectInfo.id}`)}
+ onClick={() => navigate(`/projects/details`)}
>
{projectInfo.shortName
? `${projectInfo.name} (${projectInfo.shortName})`
@@ -162,7 +162,7 @@ const ProjectListView = ({ projectData, recall }) => {
navigate(`/projects/${projectInfo.id}`)}
+ onClick={() => navigate(`/projects/details`)}
>
View details
@@ -193,4 +193,4 @@ const ProjectListView = ({ projectData, recall }) => {
);
};
-export default ProjectListView;
+export default ProjectListView;
\ No newline at end of file
diff --git a/src/router/AppRoutes.jsx b/src/router/AppRoutes.jsx
index 7c364ca9..5ce5b6d4 100644
--- a/src/router/AppRoutes.jsx
+++ b/src/router/AppRoutes.jsx
@@ -63,7 +63,7 @@ const router = createBrowserRouter(
{ path: "/", element: