import React, { useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { getProjects, getToggleTab, modalToggle, setAllProjects, setToggleTab, } from "@redux/projectsTrackerSlice"; import { caseOfNum, urlForLocal } from "@utils/helper"; import { apiRequest } from "@api/request"; import { getCorrectDate } from "@components/Calendar/calendarHelper"; import BaseButton from "@components/Common/BaseButton/BaseButton"; import { Footer } from "@components/Common/Footer/Footer"; import { Loader } from "@components/Common/Loader/Loader"; import TrackerModal from "@components/Modal/Tracker/TrackerModal/TrackerModal"; import { Navigation } from "@components/Navigation/Navigation"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import ProjectTiket from "@components/ProjectTiket/ProjectTiket"; import addProjectImg from "assets/icons/addProjectImg.svg"; import archiveTrackerProjects from "assets/icons/archiveTrackerProjects.svg"; import arrowViewReport from "assets/icons/arrows/arrowViewReport.svg"; import filterIcon from "assets/icons/filterIcon.svg"; import plus from "assets/icons/plus.svg"; import search from "assets/icons/serchIcon.png"; import project from "assets/icons/trackerProject.svg"; import tasks from "assets/icons/trackerTasks.svg"; import archive from "assets/images/archiveIcon.png"; import mockAvatar from "assets/images/avatarMok.png"; import downloadExel from "assets/images/downloadExel.svg"; import noProjects from "assets/images/noProjects.png"; import statusTimeTask from "assets/images/statusTimeTask.svg"; import "./tracker.scss"; export const Tracker = () => { const dispatch = useDispatch(); const projects = useSelector(getProjects); const tab = useSelector(getToggleTab); const [allTasks, setAllTasks] = useState([]); const [filteredAllTasks, setFilteredAllTasks] = useState([]); const [loader, setLoader] = useState(false); const [filterCompleteTasks, setFilterCompleteTasks] = useState([]); const [allCompletedTasks, setAllCompletedTasks] = useState([]); const [modalCreateProject, setModalCreateProject] = useState(false); const tabs = ["projectsTab", "tasksTab", "archiveTab"]; useEffect(() => { setLoader(true); apiRequest( `/project/project-list?user_id=${localStorage.getItem( "id" )}&expand=columns` ).then((el) => { dispatch(setAllProjects(el.projects)); setLoader(false); // setAllCompletedTasks(el.projects.filter((project) => { // if (project.status === 10 && project.columns.length) { // return project // } // }).map((project) => { return project.columns}).reduce((acu, curr) => { // curr.forEach((item) => { // acu.push(...item.tasks) // }) // return acu // }, [])) }); apiRequest( `/task/get-user-tasks?user_id=${localStorage.getItem("id")}&expand=timers` ).then((el) => { const allTasks = el ? el.filter((item) => item.status !== 0) : []; const completedTasks = el ? el.filter((item) => item.status === 0) : []; setAllTasks(allTasks); setFilteredAllTasks(allTasks); setAllCompletedTasks(completedTasks); setFilterCompleteTasks(completedTasks); }); }, []); const toggleTabs = (index) => { dispatch(setToggleTab(index)); }; function filterAllTask(e) { setFilteredAllTasks( allTasks.filter((item) => { if (!e.target.value) { return item; } if ( item.title.toLowerCase().startsWith(e.target.value.toLowerCase()) || item.description .toLowerCase() .startsWith(e.target.value.toLowerCase()) ) { return item; } }) ); } function filterArchiveTasks(e) { setFilterCompleteTasks( allCompletedTasks.filter((item) => { if (!e.target.value) { return item; } if ( item.title.toLowerCase().startsWith(e.target.value.toLowerCase()) || item.description .toLowerCase() .startsWith(e.target.value.toLowerCase()) ) { return item; } }) ); } function toggleDescTask(e) { e.target.closest("img").classList.toggle("open-desc-item"); e.target .closest("td") .querySelector(".taskList__table__name-project") .classList.toggle("hide-desc"); } return (
Проекты
Все мои задачи
Архив
Создайте свой первый проект
Ставьте задачи, следите за прогрессом, ведите учёт рабочего времени
Ставьте задачи, следите за прогрессом, ведите учёт рабочего времени
{25} - {35}
Фильтр
Очистить фильтр
Задача | Статус | Потраченное время | Дата начала | Дедлайн |
---|---|---|---|---|
{task.title}
{
toggleDescTask(e);
}}
>
Проект:{projects.map((project) => { if (project.id == task.project_id) { return project.name; } })} |
{task.status == 1 ? "Active" : "Close"}
|
{task.timers.map((item) => { let time = new Date(item.deltaSeconds * 1000) .toISOString() .slice(11, 19); return `${time}`; })} | {new Date(task.created_at).toLocaleDateString()} | {new Date(task.dead_line).toLocaleDateString()} |
{2}
{"4 ч 34 мин"}
Сверка пройдена
Скачать Exel отчет
Нажимая кнопку - “Закрыть сегодняшний день” - вы отправляете потрачеенное время на сверку
{`${filterCompleteTasks.length} ${caseOfNum(filterCompleteTasks.length, "tasks")}`}
Задача
Потраченное время
Дата окончания
{task.title}
{task.timers.map((item) => { let time = new Date(item.deltaSeconds * 1000) .toISOString() .slice(11, 19); return `${time}`; })}
{getCorrectDate(task.updated_at)}
В данном месяце у вас не было задач
{`${ projects.filter((project) => project.status === 10).length } ${caseOfNum( projects.filter((project) => project.status === 10) .length, "projects" )}`}
{project.name}
{project.date}
{"Василий Тарасов"}
В архиве проектов нет