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 { 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 the FilterIcon component import GlobalModel from "../../components/common/GlobalModel"; import AssignTask from "../../components/Project/AssignTask"; import SubTask from "../../components/Activities/SubTask"; const DailyTask = () => { const [searchParams] = useSearchParams(); const projectIdFromUrl = searchParams.get("project"); const selectedProject = useSelector( (store) => store.localVariables.projectId ); const { projects, loading: project_loading, error: projects_Error, } = useProjects(); const [initialized, setInitialized] = useState(false); const dispatch = useDispatch(); const [filters, setFilters] = useState({ selectedBuilding: "", selectedFloors: [], selectedActivities: [], }); useEffect(() => { if (!project_loading && projects.length > 0 && !initialized) { if (projectIdFromUrl) { dispatch(setProjectId(projectIdFromUrl)); } else if (selectedProject === 1 || selectedProject === undefined) { dispatch(setProjectId(projects[0].id)); } setInitialized(true); } }, [ project_loading, projects, projectIdFromUrl, selectedProject, initialized, dispatch, ]); 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(() => { 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 handleProjectChange = (e) => { const newProjectId = e.target.value; dispatch(setProjectId(newProjectId)); setTaskLists([]); setFilters({ selectedBuilding: "", selectedFloors: [], selectedActivities: [], }); }; const handleCloseAction = (IsSubTask) => { if ( IsSubTask ) { setIsSubTaskNeeded( true ) setIsModalOpenComment(false) } else { refetch( selectedProject, dateRange.startDate, dateRange.endDate ); setIsModalOpenComment(false) } } const hanleCloseSubTask = () => { setIsSubTaskNeeded( false ) setComment(null) } return ( <>
{isModalOpenComment && ( setIsModalOpenComment(false)}> )} {IsSubTaskNeeded && ( )}
{/* --- Spinner when tasks are loading --- */} {(task_loading || project_loading) && ( )} {!task_loading && !project_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"}
{task.plannedTask || "NA"} / {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}
)}
); }; export default DailyTask;