diff --git a/public/assets/css/default.css b/public/assets/css/default.css index 936c150b..42852b61 100644 --- a/public/assets/css/default.css +++ b/public/assets/css/default.css @@ -175,3 +175,7 @@ .text-darkgreen { color: #16a085; } + +.table-row-header { + background-color: #efefef; +} diff --git a/src/components/Activities/ReportTask.jsx b/src/components/Activities/ReportTask.jsx index 1d02b432..286d3df4 100644 --- a/src/components/Activities/ReportTask.jsx +++ b/src/components/Activities/ReportTask.jsx @@ -43,7 +43,7 @@ export const ReportTask = ({ report, closeModal, refetch }) => { }; let response = await TasksRepository.reportTask(reportData); - showToast("succesfully", "success"); + showToast("Task reported successfully.", "success"); refetch(); closeModal(); } catch (error) { diff --git a/src/index.css b/src/index.css index 96f19f7b..21f8a532 100644 --- a/src/index.css +++ b/src/index.css @@ -130,3 +130,11 @@ button:focus-visible { .spin { animation: spin 1s linear infinite; } +.popover-body { + padding: 0 !important; +} +.custom-popover{ + max-height: 100px; + overflow: auto; + +} \ No newline at end of file diff --git a/src/pages/Activities/DailyTask.jsx b/src/pages/Activities/DailyTask.jsx index e220a6d0..6455453d 100644 --- a/src/pages/Activities/DailyTask.jsx +++ b/src/pages/Activities/DailyTask.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useRef } from "react"; import { useDispatch, useSelector } from "react-redux"; import Breadcrumb from "../../components/common/Breadcrumb"; import { dailyTask } from "../../data/masters"; @@ -32,7 +32,7 @@ const DailyTask = () => { // Sync projectId (either from URL or pick first accessible one) useEffect(() => { if (!project_lodaing && projects.length > 0 && !initialized) { - if (selectedProject === 1 || selectedProject === undefined) { + if (selectedProject === 1 || selectedProject === undefined) { dispatch(setProjectId(projects[0].id)); } @@ -55,11 +55,20 @@ const DailyTask = () => { ); const [TaskLists, setTaskLists] = useState([]); + const [dates, setDates] = useState([]); + const popoverRefs = useRef([]); useEffect(() => { setTaskLists(TaskList); }, [TaskList, selectedProject]); + useEffect(() => { + const AssignmentDates = [ + ...new Set(TaskLists.map((task) => task.assignmentDate.split("T")[0])), + ].sort((a, b) => new Date(b) - new Date(a)); + setDates(AssignmentDates); + }, [TaskLists]); + const [selectedTask, selectTask] = useState(null); const [comments, setComment] = useState(null); @@ -75,6 +84,21 @@ const DailyTask = () => { selectTask(task); openModal(); }; + + useEffect(() => { + popoverRefs.current.forEach((el) => { + console.log(el); + if (el) { + new bootstrap.Popover(el, { + trigger: "focus", + placement: "left", + html: true, + content: el.getAttribute("data-bs-content"), // use inline content from attribute + }); + } + }); + }, [dates]); + return ( <>
{
@@ -157,125 +181,170 @@ const DailyTask = () => { - - {task_loading && ( + {task_loading && (

Loading..

)} - {project_lodaing && - - Loading... - - } - {TaskLists?.length === 0 && !task_loading && !project_lodaing &&( - - - No Task Found - - - )} - - {TaskLists.map((task, index) => { + {dates.map((date, i) => { return ( - - - -
- {task.workItem.activityMaster.activityName || - "No Activity Name"} -
-
- {" "} - -
- - - {task.plannedTask || "NA"} / - {task.workItem.plannedWork - - task.workItem.completedWork} - - {task.completedTask} - {formatDate(task.assignmentDate)} - -
- {task.teamMembers.slice(0, 3).map((member) => ( -
- {/* Avatar */} - - {member?.firstName.slice(0, 1)} - -
- ))} - {task.teamMembers.length > 3 && ( -
- - +{task.teamMembers.length - 3} - -
- )} -
- - -
- - -
+ + + + {date} + {TaskLists.filter((task) => + task.assignmentDate.includes(date) + ).map((task, index) => { + const refIndex = index * 10 + i; + console.log(refIndex); + return ( + + + +
+ {task.workItem.activityMaster + .activityName || "No Activity Name"} +
+
+ {" "} + +
+ + + {task.plannedTask || "NA"} / + {task.workItem.plannedWork - + task.workItem.completedWork} + + {task.completedTask} + {formatDate(task.assignmentDate)} + +
+ (popoverRefs.current[refIndex] = el) + } + tabIndex="0" + className="d-flex align-items-center avatar-group justify-content-center" + data-bs-toggle="popover" + data-bs-trigger="focus" + data-bs-placement="left" + data-bs-html="true" + data-bs-content={` +
+ ${task.teamMembers + .map( + (member) => ` +
+
+ + ${ + member?.firstName?.charAt( + 0 + ) || "" + }${ + member?.lastName?.charAt(0) || "" + } + +
+ ${member.firstName} ${ + member.lastName + } +
+ ` + ) + .join("")} +
+ `} + > + {task.teamMembers + .slice(0, 3) + .map((member) => ( +
+ {/* Avatar */} + + {member?.firstName.slice(0, 1)} + +
+ ))} + {task.teamMembers.length > 3 && ( +
+ + +{task.teamMembers.length - 3} + +
+ )} +
+ + +
+ + +
+ + +
+ ); + })}
); })}