import React, { useEffect, useState } from "react"; import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader"; import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { Footer } from "../../components/Footer/Footer"; import { useDispatch, useSelector } from "react-redux"; import { getProjects } from "../../redux/projectsTrackerSlice"; import ModalTiket from "../../components/UI/ModalTiket/ModalTiket"; import ModalCreate from "../../components/UI/ModalCreate/ModalCreate"; import ModalAdd from "../../components/UI/ModalAdd/ModalAdd"; import project from "../../images/trackerProject.svg"; import tasks from "../../images/trackerTasks.svg"; import archive from "../../images/archiveTracker.svg"; import avatarTest from "../../images/AvatarTest .png"; import selectArrow from "../../images/select.svg"; import commentsBoard from "../../images/commentsBoard.svg"; import filesBoard from "../../images/filesBoard.svg"; import search from "../../images/serchIcon.png"; import noProjects from "../../images/noProjects.png"; import arrow from "../../images/arrowCalendar.png"; import link from "../../images/link.svg"; import archiveSet from "../../images/archive.svg"; import del from "../../images/delete.svg"; import edit from "../../images/edit.svg"; import "./tracker.scss"; import ModalSettings from "../../components/UI/ModalSettings/ModalSettings"; export const Tracker = () => { const [toggleTab, setToggleTab] = useState(1); const [tabTaskMok, setTabTaskMok] = useState([ { name: "Открытые", open: false, tasks: [ { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 1, }, { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 2, }, ], }, { name: "В процессе", open: false, tasks: [ { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 3, }, ], }, { name: "На проверке", open: false, tasks: [ { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 4, }, { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 5, }, { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 6, }, { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 9, }, ], }, { name: "Готово", open: false, tasks: [ { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 7, }, { task: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 12, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: 8, }, ], }, ]); const [allTasks] = useState([ { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, ]); const [archiveProjects] = useState([ { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, { name: "Будущее России", date: "7 марта 2023 г", }, ]); const [completeTasks] = useState([ { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "7 марта 2023 г", avatarDo: avatarTest, project: "Будущее России", }, ]); const [filterCompleteTasks, setFilterCompleteTasks] = useState(completeTasks); // Modal State const [modalActiveTicket, setModalActiveTicket] = useState(false); const [modalAddWorker, setModalAddWorker] = useState(false); const [modalCreateProject, setModalCreateProject] = useState(false); const [modalCreateColl, setModalCreateColl] = useState(false); const [modalCreateTiket, setModalCreateTiket] = useState(false); const [modalSettings, setModalSettings] = useState(false); const [valueTiket, setValueTiket] = useState(""); const [valueColl, setValueColl] = useState(""); // const [projectTasksOpen, setProjectTasksOpen] = useState(false); const [selectedTab, setSelectedTab] = useState({ name: "", indexTab: 0, task: [], }); const [startWrapperIndex, setStartWrapperIndex] = useState(null); const [wrapperHover, setWrapperHover] = useState([ false, false, false, false, ]); const projects = useSelector(getProjects); const toggleTabs = (index) => { if (projectTasksOpen) { setProjectTasksOpen(false); } setToggleTab(index); }; function toggleMoreTasks(wrapperIndex) { setTabTaskMok((prevArray) => prevArray.map((elem, index) => { if (wrapperIndex === index) { return { ...elem, open: !elem.open }; } else { return elem; } }) ); } function dragStartHandler(e, task, wrapperIndex) { setStartWrapperIndex({ task: task, index: wrapperIndex }); setTimeout(() => { e.target.classList.add("tasks__board__item__hide"); }, 0); } function dragEndHandler(e) { setWrapperHover((prevArray) => prevArray.map((elem) => { return false; }) ); e.target.classList.remove("tasks__board__item__hide"); } function dragOverHandler(e) { e.preventDefault(); } function dragEnterHandler(wrapperIndex) { if (wrapperIndex === startWrapperIndex.index) { return; } setWrapperHover((prevArray) => prevArray.map((elem, index) => { if (index === wrapperIndex) { return true; } else { return false; } }) ); } function dragDropHandler(e, wrapperIndex) { e.preventDefault(); if (startWrapperIndex.index === wrapperIndex) { return; } setWrapperHover((prevArray) => prevArray.map((elem) => { return false; }) ); setTabTaskMok((prevArray) => prevArray.map((elem, index) => { if (index === wrapperIndex) { return { ...elem, tasks: [...elem.tasks, startWrapperIndex.task] }; } else if (index === startWrapperIndex.index) { return { ...elem, tasks: elem.tasks.filter((item) => { return item.id !== startWrapperIndex.task.id; }), }; } else { return elem; } }) ); } function filterArchiveTasks(e) { setFilterCompleteTasks( completeTasks.filter((item) => { if (!e.target.value) { return item; } if ( item.name.toLowerCase().startsWith(e.target.value.toLowerCase()) || item.description .toLowerCase() .startsWith(e.target.value.toLowerCase()) ) { return item; } }) ); } function selectedTabTask(e, wrapperIndex, name, tasks) { let tab = { name: name, indexTab: wrapperIndex, task: tasks }; setSelectedTab(tab); setModalCreateTiket(true); } function createTiket() { tabTaskMok.filter((item) => { if (item.name == selectedTab.name) { let idItem = 0; item.tasks.forEach((item) => { idItem = item.id; }); let newTiket = { task: valueTiket, description: "Сверстать часть таблицы. Сверстать часть таблицы", comments: 0, files: 0, avatarCreated: avatarTest, avatarDo: avatarTest, id: idItem + 1, }; item.tasks.push(newTiket); } }); setModalCreateTiket(false); setValueTiket(""); } function createTab() { let newTab = { name: valueColl, open: false, tasks: [], }; tabTaskMok.unshift(newTab); setValueColl(""); setModalCreateColl(false); } function selectedProject(project) { projects.filter((item) => { if (item.name == project.name) { console.log(project); setModalSettings(true); } }); } useEffect(() => { initListeners(); }, []); function initListeners() { document.addEventListener("click", closeByClickingOut); } function closeByClickingOut(event) { const path = event.path || (event.composedPath && event.composedPath()); if ( event && !path.find((item) => item.classList && item.classList.contains("project")) ) { setModalSettings(false); } } return (

Управление проектами с трекером

toggleTabs(1)} > img

Проекты

toggleTabs(2)} > img

Все мои задачи

toggleTabs(3)} > img

Архив

{Boolean(projects.length) && !projectTasksOpen && projects.map((project, index) => { return (

setProjectTasksOpen(true)}> {project.name}

Открытые задачи

{project.count} + selectedProject(project)} > ...

редактировать

ссылка на проект

в архив

удалить

); })} {!Boolean(projects.length) && !projectTasksOpen && (
noProjectImg

Создайте свой первый проект

Ставьте задачи, следите за прогрессом, ведите учёт рабочего времени

)} {Boolean(projects.length) && !projectTasksOpen && (

Ставьте задачи, следите за прогрессом, ведите учёт рабочего времени

)}

Проект : Разработка трекера

Введите название колонки

setValueColl(e.target.value)} >

Добавьте участника

Введите имя или e-mail{" "}

setValueTiket(e.target.value)} >
setModalCreateColl(true)}>+

добавить задачу в проект

avatar avatar +9 +

добавить участника в проект

Учавствую arrow
Мои arrow
setProjectTasksOpen(false)} >

Вернуться на проекты

arrow

Введите название карточки

setValueTiket(e.target.value)} >
{tabTaskMok.map((section, wrapperIndex) => { return (
dragOverHandler(e)} onDragEnter={(e) => dragEnterHandler(wrapperIndex)} onDrop={(e) => dragDropHandler(e, wrapperIndex)} className={`tasks__board ${ section.tasks.length >= 3 ? "tasks__board__more" : "" } ${ wrapperHover[wrapperIndex] ? "tasks__board__hover" : "" }`} >
{section.name}
selectedTabTask( e, wrapperIndex, section.name, section.tasks ) } > + ...
{section.tasks.map((task, index) => { if (index > 2) { if (!section.open) { return; } } return (
dragStartHandler(e, task, wrapperIndex) } onDragEnd={(e) => dragEndHandler(e)} onClick={() => setModalActiveTicket(true)} >

{task.task}

{task.description}

commentsImg {task.comments} коментариев
filesImg {task.files} файлов
avatar avatar
); })} {section.tasks.length > 3 && ( toggleMoreTasks(wrapperIndex)} > {section.open ? "-" : "+"} )}
); })}

Список всех задач

search filterArchiveTasks(event)} />
{allTasks.map((task, index) => { return (
{task.name}

{task.description}

avatar

{task.project}

{task.dateComplete}
); })}

Архив задач:

{filterCompleteTasks.length} задач(а)

search filterArchiveTasks(event)} />
{Boolean(filterCompleteTasks.length) ? ( filterCompleteTasks.map((task, index) => { return (

{task.description}

{task.dateComplete}

avatar
Проект

{task.project}

); }) ) : (

В архиве задач нет

)}

Архив проектов:

{archiveProjects.length} проект(ов)

{Boolean(archiveProjects) ? ( archiveProjects.map((project, index) => { return (

{project.name}

{project.date}

); }) ) : (

В архиве проектов нет

)}
); };