import React, { useEffect, useState, useRef } from "react"; import { useDispatch, useSelector } from "react-redux"; import Breadcrumb from "../../components/common/Breadcrumb"; import { dailyTask } from "../../data/masters"; import { useTaskList } from "../../hooks/useTasks"; import { useProjects } from "../../hooks/useProjects"; import { setProjectId } from "../../slices/localVariablesSlice"; import { useProfile } from "../../hooks/useProfile"; import { formatDate } from "../../utils/dateUtils"; import GlobalModel from "../../components/common/GlobalModel"; import AssignRoleModel from "../../components/Project/AssignRole"; import { ReportTask } from "../../components/Activities/ReportTask"; import ReportTaskComments from "../../components/Activities/ReportTaskComments"; import DateRangePicker from "../../components/common/DateRangePicker"; import DatePicker from "../../components/common/DatePicker"; import { useSearchParams } from "react-router-dom"; const DailyTask = () => { const [searchParams] = useSearchParams(); const projectId = searchParams.get("project"); const selectedProject = useSelector( (store) => store.localVariables.projectId ); const { projects, loading: project_lodaing, error: projects_Error, } = useProjects(); const [initialized, setInitialized] = useState(false); // Sync projectId (either from URL or pick first accessible one) useEffect(() => { if (!project_lodaing && projects.length > 0 && !initialized) { if (selectedProject === 1 || selectedProject === undefined) { dispatch(setProjectId(projects[0].id)); } setInitialized(true); } }, [project_lodaing, projects, projectId, selectedProject, initialized]); const dispatch = useDispatch(selectedProject); const [dateRange, setDateRange] = useState({ startDate: "", endDate: "" }); const { TaskList, loading: task_loading, error: task_error, refetch, } = useTaskList( initialized ? selectedProject : null, initialized ? dateRange.startDate : null, initialized ? dateRange.endDate : null ); 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); const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpenComment, setIsModalOpenComment] = useState(false); const openModal = () => setIsModalOpen(true); const closeModal = () => setIsModalOpen(false); const openComment = () => setIsModalOpenComment(true); const closeCommentModal = () => setIsModalOpenComment(false); const handletask = (task) => { 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 ( <>
{task_loading && ( )} {dates.map((date, i) => { return ( {TaskLists.filter((task) => task.assignmentDate.includes(date) ).map((task, index) => { const refIndex = index * 10 + i; console.log(refIndex) return ( ); })} ); })}
Activity Assigned Compeleted Assign On Team Actions

Loading..

{date}
{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}
)}
); }; export default DailyTask;