import React, { useState } from "react"; import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader"; 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 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/search.svg"; import "./tracker.scss"; 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 [completeTasks] = useState([ { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PR - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PK - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PE - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PA - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PB - 2245", description: "Верстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PC - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PD - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, { name: "PA - 2245", description: "Сверстать часть таблицы. Сверстать часть таблицы", dateComplete: "07/мар/23", avatarDo: avatarTest, }, ]); const [filterCompleteTasks, setFilterCompleteTasks] = useState(completeTasks); const [modalActiveTicket, setModalActiveTicket] = useState(false); const [modalCreateProject, setModalCreateProject] = useState(false); const [modalCreateColl, setModalCreateColl] = useState(false); const [startWrapperIndex, setStartWrapperIndex] = useState(null); const [wrapperHover, setWrapperHover] = useState([ false, false, false, false, ]); const projects = useSelector(getProjects); const toggleTabs = (index) => { 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 createProject() { setModalCreateProject(true); } return (

Трекер

toggleTabs(1)} > img

Проекты

toggleTabs(2)} > img

Задачи

toggleTabs(3)} > img

Архив

{projects.map((project, index) => { return (

{project.name}

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

{project.count} +
); })}

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

setModalCreateColl(true)} > +
avatar avatar avatar avatar +9
Учавствую arrow
Мои arrow
{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}
+ ...
{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 ? "-" : "+"} )}
); })}

Архив:

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

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

{task.description}

{task.dateComplete}

avatar

{task.name}

); })}
); };