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 { useProjectName, useProjects } from "../../hooks/useProjects"; import { setProjectId } from "../../slices/localVariablesSlice"; import { ReportTask } from "../../components/Activities/ReportTask"; import ReportTaskComments from "../../components/Activities/ReportTaskComments"; import DateRangePicker from "../../components/common/DateRangePicker"; import { useSearchParams } from "react-router-dom"; import moment from "moment"; import FilterIcon from "../../components/common/FilterIcon"; import GlobalModel from "../../components/common/GlobalModel"; import AssignTask from "../../components/Project/AssignTask"; import SubTask from "../../components/Activities/SubTask"; import {formatNumber} from "../../utils/dateUtils"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { APPROVE_TASK, ASSIGN_REPORT_TASK } from "../../utils/constants"; const DailyTask = () => { const selectedProject = useSelector( (store) => store.localVariables.projectId ); const dispatch = useDispatch() const { projectNames, loading: projectLoading, fetchData } = useProjectName(); const [filters, setFilters] = useState({ selectedBuilding: "", selectedFloors: [], selectedActivities: [], }); const [dateRange, setDateRange] = useState({ startDate: "", endDate: "" }); const ApprovedTaskRights = useHasUserPermission(APPROVE_TASK) const ReportTaskRights = useHasUserPermission(ASSIGN_REPORT_TASK) const { TaskList, loading: task_loading, error: task_error, refetch, } = useTaskList( selectedProject || null, dateRange?.startDate || null, dateRange?.endDate || null ); useEffect(() => { if(selectedProject == null){ dispatch(setProjectId(projectNames[0]?.id)); } },[]) const [TaskLists, setTaskLists] = useState([]); const [dates, setDates] = useState([]); const popoverRefs = useRef([]); useEffect(() => { if (TaskList) { let filteredTasks = TaskList; if (filters.selectedBuilding) { filteredTasks = filteredTasks.filter( (task) => task?.workItem?.workArea?.floor?.building?.name === filters.selectedBuilding ); } if (filters.selectedFloors.length > 0) { filteredTasks = filteredTasks?.filter((task) => filters.selectedFloors?.includes( task?.workItem?.workArea?.floor?.floorName ) ); } if (filters.selectedActivities.length > 0) { filteredTasks = filteredTasks.filter((task) => filters.selectedActivities.includes( task?.workItem?.activityMaster?.activityName ) ); } setTaskLists(filteredTasks); } else { setTaskLists([]); } }, [ TaskList, filters?.selectedBuilding, filters?.selectedFloors, filters?.selectedActivities, ]); 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({ task: null, isActionAllow: false }); 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 [IsSubTaskNeeded, setIsSubTaskNeeded] = useState(false); const [SubTaskData, setSubTaskData] = useState(); const handletask = (task) => { selectTask(task); openModal(); }; useEffect(() => { popoverRefs.current.forEach((el) => { if (el) { new bootstrap.Popover(el, { trigger: "focus", placement: "left", html: true, content: el.getAttribute("data-bs-content"), }); } }); }, [dates, TaskLists]); const handlecloseModal = () => { setIsModalOpen( false ) // refetch(); } const handleCloseAction = (IsSubTask) => { if (IsSubTask) { setIsSubTaskNeeded(true); setIsModalOpenComment(false); } else { // refetch(); setIsModalOpenComment(false); } }; const hanleCloseSubTask = () => { setIsSubTaskNeeded(false); setComment( null ); // refetch(); }; return ( <> {isModalOpen && } {isModalOpenComment && ( setIsModalOpenComment(false)} > )} {IsSubTaskNeeded && ( )}
{/* --- Spinner when tasks are loading --- */} {task_loading && ( )} {!task_loading && TaskLists.length === 0 && ( )} {!task_loading && TaskLists.length > 0 && dates.map((date, i) => { const tasksForDate = TaskLists.filter((task) => task.assignmentDate.includes(date) ); if (tasksForDate.length === 0) return null; return ( {tasksForDate.map((task, index) => { const refIndex = index * 10 + i; return ( ); })} ); })}
Activity Assigned Completed Assign On Team Actions
{" "}
Loading...

Loading Tasks...

{" "}

No Reports Found

{" "} {moment(date).format("DD-MM-YYYY")}
{task.workItem.activityMaster .activityName || "No Activity Name"}
{formatNumber(task.plannedTask)} / {formatNumber(task.workItem.plannedWork - task.workItem.completedWork)} {task.completedTask} {moment(task.assignmentDate).format( "DD-MM-YYYY" )}
(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) => (
{member?.firstName.slice(0, 1)}
))} {task.teamMembers.length > 3 && (
+ {task.teamMembers.length - 3}
)}
{ ReportTaskRights && } {(ApprovedTaskRights && task.reportedDate ) && ( )}
); }; export default DailyTask;