From 8ac9c64bf42b0ceafbb9e926f9129cea94f1f164 Mon Sep 17 00:00:00 2001 From: Vikas Nale Date: Fri, 20 Jun 2025 14:33:51 +0530 Subject: [PATCH 1/7] Add cards in project list and diectory list views --- public/assets/css/default.css | 5 + src/pages/Directory/Directory.jsx | 126 +++--- src/pages/Directory/DirectoryPageHeader.jsx | 8 +- src/pages/project/ProjectList.jsx | 405 ++++++++++---------- src/pages/project/ProjectListView.jsx | 4 +- 5 files changed, 289 insertions(+), 259 deletions(-) diff --git a/public/assets/css/default.css b/public/assets/css/default.css index 32b8644b..7da3c592 100644 --- a/public/assets/css/default.css +++ b/public/assets/css/default.css @@ -213,3 +213,8 @@ .ql-editor { max-height: 200px; } + +/* Remove Table Header Top Line */ +thead tr { + border-top: 1px solid white; +} diff --git a/src/pages/Directory/Directory.jsx b/src/pages/Directory/Directory.jsx index ff8457e2..eb348e10 100644 --- a/src/pages/Directory/Directory.jsx +++ b/src/pages/Directory/Directory.jsx @@ -326,26 +326,29 @@ const Directory = ({ IsPage = true, prefernceContacts }) => { )} -
- - +
+
+ +
+
+
{/* Messages when listView is false */} {!listView && (
@@ -360,48 +363,55 @@ const Directory = ({ IsPage = true, prefernceContacts }) => { )} {/* Table view (listView === true) */} + {listView ? ( - - {loading && ( - - - {" "} -

Loading...

{" "} - - - )} +
+
+ + {loading && ( + + + {" "} +

Loading...

{" "} + + + )} - {!loading && contacts?.length === 0 && ( - - -

No contact found

- - - )} + {!loading && contacts?.length === 0 && ( + + +

No contact found

+ + + )} - {!loading && currentItems.length === 0 && contacts?.length > 0 && ( - - -

No matching contact found

- - - )} + {!loading && + currentItems.length === 0 && + contacts?.length > 0 && ( + + +

No matching contact found

+ + + )} - {!loading && - currentItems.map((contact) => ( - - ))} -
+ {!loading && + currentItems.map((contact) => ( + + ))} + +
+
) : (
{!loading && diff --git a/src/pages/Directory/DirectoryPageHeader.jsx b/src/pages/Directory/DirectoryPageHeader.jsx index c4a1e77a..7de25693 100644 --- a/src/pages/Directory/DirectoryPageHeader.jsx +++ b/src/pages/Directory/DirectoryPageHeader.jsx @@ -32,16 +32,16 @@ const DirectoryPageHeader = ({
setSearchText(e.target.value)} style={{ width: "200px" }} /> -
+
+ +
-
- - -
- -
- -
    - {[ - { - id: "b74da4c2-d07e-46f2-9919-e75e49b12731", - label: "Active", - }, - { - id: "603e994b-a27f-4e5d-a251-f3d69b0498ba", - label: "On Hold", - }, - { - id: "ef1c356e-0fe0-42df-a5d3-8daee355492d", - label: "Inactive", - }, - { - id: "33deaef9-9af1-4f2a-b443-681ea0d04f81", - label: "Completed", - }, - ].map(({ id, label }) => ( -
  • -
    - handleStatusChange(id)} - /> - -
    -
  • - ))} -
+
+ +
    + {[ + { + id: "b74da4c2-d07e-46f2-9919-e75e49b12731", + label: "Active", + }, + { + id: "603e994b-a27f-4e5d-a251-f3d69b0498ba", + label: "On Hold", + }, + { + id: "ef1c356e-0fe0-42df-a5d3-8daee355492d", + label: "Inactive", + }, + { + id: "33deaef9-9af1-4f2a-b443-681ea0d04f81", + label: "Completed", + }, + ].map(({ id, label }) => ( +
  • +
    + handleStatusChange(id)} + /> + +
    +
  • + ))} +
+
- -
-
- +
+ +
+
- {loading &&

Loading...

} {!loading && filteredProjects.length === 0 && !listView && (

No projects found.

)} -
- {listView ? ( -
- - - - - - - - - - - - - - - {currentItems.length === 0 ? ( + {listView ? ( +
+
+
+
- Project Name - Contact PersonSTART DATEDEADLINETaskProgress -
- -
    - {[ - { - id: "b74da4c2-d07e-46f2-9919-e75e49b12731", - label: "Active", - }, - { - id: "603e994b-a27f-4e5d-a251-f3d69b0498ba", - label: "On Hold", - }, - { - id: "ef1c356e-0fe0-42df-a5d3-8daee355492d", - label: "Inactive", - }, - { - id: "33deaef9-9af1-4f2a-b443-681ea0d04f81", - label: "Completed", - }, - ].map(({ id, label }) => ( -
  • -
    - handleStatusChange(id)} - /> - -
    -
  • - ))} -
-
-
- Action -
+ - + + + + + + + + - ) : ( - currentItems.map((project) => ( - - )) - )} - -
- No projects found - + Project Name + Contact PersonSTART DATEDEADLINETaskProgress +
+ +
    + {[ + { + id: "b74da4c2-d07e-46f2-9919-e75e49b12731", + label: "Active", + }, + { + id: "603e994b-a27f-4e5d-a251-f3d69b0498ba", + label: "On Hold", + }, + { + id: "ef1c356e-0fe0-42df-a5d3-8daee355492d", + label: "Inactive", + }, + { + id: "33deaef9-9af1-4f2a-b443-681ea0d04f81", + label: "Completed", + }, + ].map(({ id, label }) => ( +
  • +
    + handleStatusChange(id)} + /> + +
    +
  • + ))} +
+
+
+ Action +
-
- ) : ( - currentItems.map((project) => ( - - )) - )} -
+ + + {currentItems.length === 0 ? ( + + + No projects found + + + ) : ( + currentItems.map((project) => ( + + )) + )} + + +
{" "} +
{" "} +
+ ) : ( +
+ {currentItems.map((project) => ( + + ))} +
+ )} {!loading && totalPages > 1 && ( )} - @@ -694,4 +695,4 @@ const EmployeeList = () => { ); }; -export default EmployeeList; \ No newline at end of file +export default EmployeeList; From a2a8e90350c58b155c7213ef02502149673388b1 Mon Sep 17 00:00:00 2001 From: Kartik sharma Date: Wed, 18 Jun 2025 10:33:13 +0530 Subject: [PATCH 4/7] The current behavior is that when the "All Employees" filter is off, the system should display employees only for the globally selected project, not all employees. --- src/pages/employee/EmployeeList.jsx | 46 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/pages/employee/EmployeeList.jsx b/src/pages/employee/EmployeeList.jsx index 24ce0556..b9a6e8de 100644 --- a/src/pages/employee/EmployeeList.jsx +++ b/src/pages/employee/EmployeeList.jsx @@ -25,22 +25,32 @@ import ConfirmModal from "../../components/common/ConfirmModal"; import { useSelector } from "react-redux"; const EmployeeList = () => { - const selectedProjectId = useSelector((store) => store.localVariables.projectId); - const [selectedProject, setSelectedProject] = useState(() => selectedProjectId || ""); - const { projects, loading: projectLoading } = useProjects(); + // const selectedProjectId = useSelector((store) => store.localVariables.projectId); + // const [selectedProject, setSelectedProject] = useState(() => selectedProjectId || ""); + // const { projects, loading: projectLoading } = useProjects(); + + const selectedProjectId = useSelector( + (store) => store.localVariables.projectId + ); + const [showInactive, setShowInactive] = useState(false); const [showAllEmployees, setShowAllEmployees] = useState(false); const Manage_Employee = useHasUserPermission(MANAGE_EMPLOYEES); + const { employees, loading, setLoading, error, recallEmployeeData } = - useEmployeesAllOrByProjectId(showAllEmployees ? null : selectedProject, showInactive); + // useEmployeesAllOrByProjectId(showAllEmployees ? null : selectedProject, showInactive); + useEmployeesAllOrByProjectId( + showAllEmployees ? null : selectedProjectId, + showInactive + ); const [employeeList, setEmployeeList] = useState([]); const [modelConfig, setModelConfig] = useState(); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage] = useState(ITEMS_PER_PAGE); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); - const [searchText, setSearchText] = useState(""); - const [filteredData, setFilteredData] = useState([]); + const [searchText, setSearchText] = useState(""); + const [filteredData, setFilteredData] = useState([]); const [showModal, setShowModal] = useState(false); const [selectedEmployeeId, setSelecedEmployeeId] = useState(null); const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false); @@ -98,7 +108,8 @@ const EmployeeList = () => { setEmployeeList([]); setFilteredData([]); } - }, [loading, employees, showAllEmployees, searchText, selectedProject]); + }, [loading, employees, showAllEmployees, searchText, selectedProjectId]); + const displayData = filteredData; const indexOfLastItem = currentPage * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; @@ -198,8 +209,13 @@ const EmployeeList = () => { const isChecked = e.target.checked; setShowInactive(false); setShowAllEmployees(isChecked); + if (isChecked) { + recallEmployeeData(false, null); + } else { + recallEmployeeData(false, selectedProjectId); + } - recallEmployeeData(false, isChecked ? null : selectedProject); + // recallEmployeeData(false, isChecked ? null : selectedProject); }; const handleEmployeeModel = (id) => { @@ -212,15 +228,15 @@ const EmployeeList = () => { setIsDeleteModalOpen(true); }; - const handleProjectSelection = (e) => { - const newProjectId = e.target.value; - setSelectedProject(newProjectId); - setShowAllEmployees(false); - }; + // useEffect(() => { + // setSelectedProject(selectedProjectId || ""); + // }, [selectedProjectId]); useEffect(() => { - setSelectedProject(selectedProjectId || ""); - }, [selectedProjectId]); + if (!showAllEmployees) { + recallEmployeeData(showInactive, selectedProjectId); + } + }, [selectedProjectId, showInactive, showAllEmployees, recallEmployeeData]); return ( From a5161756c30e1ca1b0b69ffdfd6cbf56324a35fe Mon Sep 17 00:00:00 2001 From: Kartik sharma Date: Thu, 19 Jun 2025 10:43:42 +0530 Subject: [PATCH 5/7] Project Address Text Overflow. --- public/assets/vendor/css/core.css | 1 + src/components/Activities/Attendance.jsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/public/assets/vendor/css/core.css b/public/assets/vendor/css/core.css index e65d3662..d7f7cfcb 100644 --- a/public/assets/vendor/css/core.css +++ b/public/assets/vendor/css/core.css @@ -4978,6 +4978,7 @@ fieldset:disabled .btn { flex: 1 1 auto; padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); color: var(--bs-card-color); + word-break: break-word; } .card-title { diff --git a/src/components/Activities/Attendance.jsx b/src/components/Activities/Attendance.jsx index 71b0b966..01ebc105 100644 --- a/src/components/Activities/Attendance.jsx +++ b/src/components/Activities/Attendance.jsx @@ -143,7 +143,7 @@ const Attendance = ({ - {!loading > 20 && ( + {!loading && filteredData.length > 20 && (