diff --git a/src/components/Modal/Tracker/ModalTicket/modalTicket.scss b/src/components/Modal/Tracker/ModalTicket/modalTicket.scss index 60936eeb..5e17b018 100644 --- a/src/components/Modal/Tracker/ModalTicket/modalTicket.scss +++ b/src/components/Modal/Tracker/ModalTicket/modalTicket.scss @@ -352,7 +352,7 @@ outline: none; padding-left: 30px; font-weight: 400; - font-size: 12px; + font-size: 14px; line-height: 32px; border-radius: 44px; } diff --git a/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx b/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx index 5338a2f1..3f2fcf59 100644 --- a/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx +++ b/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx @@ -259,7 +259,7 @@ export const TicketFullScreen = () => {
-

Проект : {projectBoard.name}

+
Проект : {projectBoard.name}
{ - // setSelectWorkersOpen(false); - // }} +
{ + setActive(false); + setSelectWorkersOpen(false); + }} > - {modalType === "addWorker" && ( -
-
-

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

- {/*
*/} - {/* setEmailWorker(e.target.value)}*/} - {/* />*/} - {/*
*/} -
setSelectWorkersOpen(!selectWorkersOpen)} - > -

- {selectedWorker - ? selectedWorker.employee.fio - : "Выберите пользователя"} -

- arrow - {Boolean(selectWorkersOpen) && ( -
- {Boolean(workers.length) ? ( - workers.map((worker) => { - if (worker === selectedWorker) { - return; - } - return ( -
{ - setSelectedWorker(worker); - }} - > -

{worker.employee.fio}

- avatar -
- ); - }) - ) : ( -
Нет пользователей
- )} -
- )} +
e.stopPropagation()}> + {modalType === "addWorker" && ( +
+
+

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

+ {/*
*/} + {/* setEmailWorker(e.target.value)}*/} + {/* />*/} + {/*
*/} +
setSelectWorkersOpen(!selectWorkersOpen)} + > +

+ {selectedWorker + ? selectedWorker.employee.fio + : "Выберите пользователя"} +

+ arrow + {Boolean(selectWorkersOpen) && ( +
+ {Boolean(workers.length) ? ( + workers.map((worker) => { + if (worker === selectedWorker) { + return; + } + return ( +
{ + setSelectedWorker(worker); + }} + > +

{worker.employee.fio}

+ avatar +
+ ); + }) + ) : ( +
Нет пользователей
+ )} +
+ )} +
+ + Добавить +
- - Добавить - -
- )} - {modalType === "createTiketProject" && ( -
-
-

Введите название и описание задачи

-
- setValueTiket(e.target.value)} - placeholder="Название задачи" - /> + )} + {modalType === "createTiketProject" && ( +
+
+

Введите название и описание задачи

+
+ setValueTiket(e.target.value)} + placeholder="Название задачи" + /> +
+
+ setDescriptionTicket(e.target.value)} + placeholder="Описание задачи" + /> +
-
- setDescriptionTicket(e.target.value)} - placeholder="Описание задачи" - /> -
-
- - Создать - -
- )} - {modalType === "editProject" && ( -
-
-

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

-
- setProjectName(e.target.value)} - /> -
-
- - - Сохранить - -
- )} - {modalType === "createProject" && ( -
-
-

{titleProject}

-
- setNameProject(e.target.value)} - /> -
- + Создать
-
- )} - {modalType === "addSubtask" && ( -
-
-

- Вы добавляете подзадачу{" "} -

в колонку(id) задачи "{defautlInput}"

-

-

Введите текст

-
- + )} + {modalType === "editProject" && ( +
+
+

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

+
+ setProjectName(e.target.value)} + /> +
-
- e.preventDefault()}> - Добавить - -
- )} - {modalType === "createColumn" && ( -
-
-

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

-
- setValueColumn(e.target.value)} - /> -
-
- - Создать - -
- )} - {modalType === "editColumn" && ( -
-
-

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

-
- dispatch(setColumnName(e.target.value))} - /> -
-

Приоритет колонки

-
- dispatch(setColumnPriority(e.target.value))} - /> -
-
- - Сохранить - -
- )} - setActive(false)}> - + + Сохранить + +
+ )} + {modalType === "createProject" && ( +
+
+

{titleProject}

+
+ setNameProject(e.target.value)} + /> +
+ + Создать + +
+
+ )} + {modalType === "addSubtask" && ( +
+
+

+ Вы добавляете подзадачу{" "} +

в колонку(id) задачи "{defautlInput}"

+

+

Введите текст

+
+ +
+
+ e.preventDefault()} + > + Добавить + +
+ )} + {modalType === "createColumn" && ( +
+
+

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

+
+ setValueColumn(e.target.value)} + /> +
+
+ + Создать + +
+ )} + {modalType === "editColumn" && ( +
+
+

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

+
+ dispatch(setColumnName(e.target.value))} + /> +
+

Приоритет колонки

+
+ dispatch(setColumnPriority(e.target.value))} + /> +
+
+ + Сохранить + +
+ )} + + setActive(false)}> +
+
); }; diff --git a/src/components/Modal/TrackerModal/TrackerModal.jsx b/src/components/Modal/TrackerModal/TrackerModal.jsx deleted file mode 100644 index da44c264..00000000 --- a/src/components/Modal/TrackerModal/TrackerModal.jsx +++ /dev/null @@ -1,403 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { useDispatch, useSelector } from "react-redux"; - -import { apiRequest } from "../../../api/request"; -import arrowDown from "../../../assets/icons/arrows/selectArrow.png"; -import { - addPersonToProject, - editColumnName, - editProjectName, - getColumnId, - getColumnName, - getColumnPriority, - getProjectBoard, - getValueModalType, - setColumnName, - setColumnPriority, - setProject, - setProjectBoardFetch, -} from "../../../redux/projectsTrackerSlice"; -import { urlForLocal } from "../../../utils/helper"; -import "./trackerModal.scss"; - -export const TrackerModal = ({ - active, - setActive, - selectedTab, - defautlInput, - titleProject, - projectId, - priorityTask, -}) => { - const dispatch = useDispatch(); - const projectBoard = useSelector(getProjectBoard); - const columnName = useSelector(getColumnName); - const columnId = useSelector(getColumnId); - const columnPriority = useSelector(getColumnPriority); - - const modalType = useSelector(getValueModalType); - const [projectName, setProjectName] = useState(defautlInput); - const [valueColumn, setValueColumn] = useState(""); - const [nameProject, setNameProject] = useState(""); - const [valueTiket, setValueTiket] = useState(""); - const [descriptionTicket, setDescriptionTicket] = useState(""); - const [workers, setWorkers] = useState([]); - const [selectWorkersOpen, setSelectWorkersOpen] = useState(false); - const [selectedWorker, setSelectedWorker] = useState(null); - - function createTab() { - if (!valueColumn) { - return; - } - - apiRequest("/project-column/create-column", { - method: "POST", - data: { - project_id: projectBoard.id, - priority: projectBoard.columns.length - ? projectBoard.columns.at(-1).priority + 1 - : 1, - title: valueColumn, - }, - }).then(() => { - dispatch(setProjectBoardFetch(projectBoard.id)); - }); - setValueColumn(""); - setActive(false); - } - - function createTiket() { - if (!valueTiket || !descriptionTicket) { - return; - } - - apiRequest("/task/create-task", { - method: "POST", - data: { - project_id: projectBoard.id, - title: valueTiket, - description: descriptionTicket, - status: 1, - user_id: localStorage.getItem("id"), - column_id: selectedTab, - priority: priorityTask, - }, - }).then(() => { - dispatch(setProjectBoardFetch(projectBoard.id)); - }); - - setActive(false); - setValueTiket(""); - setDescriptionTicket(""); - } - - function editProject() { - apiRequest("/project/update", { - method: "PUT", - data: { - project_id: projectId, - name: projectName, - }, - }).then(() => { - setActive(false); - dispatch(editProjectName({ id: projectId, name: projectName })); - }); - } - - function changeColumnParams() { - projectBoard.columns.forEach((column) => { - if (column.id === columnId && column.priority !== columnPriority) { - const priorityColumns = [ - { - column_id: column.id, - priority: Number(columnPriority), - }, - ]; - for (let i = column.priority; i < columnPriority; i++) { - const currentColumn = { - column_id: projectBoard.columns[i].id, - priority: i, - }; - priorityColumns.push(currentColumn); - } - for (let i = column.priority; i > columnPriority; i--) { - const currentColumn = { - column_id: projectBoard.columns[i - 2].id, - priority: i, - }; - priorityColumns.push(currentColumn); - } - apiRequest("/project-column/set-priority", { - method: "POST", - data: { - project_id: projectBoard.id, - data: JSON.stringify(priorityColumns), - }, - }).then(() => { - dispatch(setProjectBoardFetch(projectBoard.id)); - }); - } - }); - changeColumnTitle(); - } - - function changeColumnTitle() { - apiRequest("/project-column/update-column", { - method: "PUT", - data: { - column_id: columnId, - title: columnName, - }, - }).then(() => { - setActive(false); - dispatch(editColumnName({ id: columnId, title: columnName })); - }); - } - - function createProject() { - if (nameProject === "") { - return; - } else { - apiRequest("/project/create", { - method: "POST", - data: { - user_id: localStorage.getItem("id"), - name: nameProject, - status: 19, - }, - }).then((res) => { - const result = { ...res, columns: [] }; - dispatch(setProject(result)); - setActive(false); - setNameProject(""); - }); - } - } - - function addUserToProject() { - apiRequest("/project/add-user", { - method: "POST", - data: { - user_id: selectedWorker.user_id, - project_id: projectBoard.id, - }, - }).then((el) => { - dispatch(addPersonToProject(el)); - setActive(false); - setSelectedWorker(""); - setSelectWorkersOpen(false); - }); - } - - useEffect(() => { - modalType === "addWorker" - ? apiRequest("/project/my-employee").then((el) => { - let persons = el.managerEmployees; - let ids = projectBoard.projectUsers.map((user) => user.user_id); - setWorkers( - persons.reduce((acc, cur) => { - if (!ids.includes(cur.user_id)) acc.push(cur); - return acc; - }, []) - ); - }) - : ""; - }, [active]); - - return ( -
{ - setActive(false); - setSelectWorkersOpen(false); - }} - > -
e.stopPropagation()}> - {modalType === "addWorker" && ( -
-
-

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

- {/*
*/} - {/* setEmailWorker(e.target.value)}*/} - {/* />*/} - {/*
*/} -
setSelectWorkersOpen(!selectWorkersOpen)} - > -

- {selectedWorker - ? selectedWorker.employee.fio - : "Выберите пользователя"} -

- arrow - {Boolean(selectWorkersOpen) && ( -
- {Boolean(workers.length) ? ( - workers.map((worker) => { - if (worker === selectedWorker) { - return; - } - return ( -
{ - setSelectedWorker(worker); - }} - > -

{worker.employee.fio}

- avatar -
- ); - }) - ) : ( -
Нет пользователей
- )} -
- )} -
-
- -
- )} - {modalType === "createTiketProject" && ( -
-
-

Введите название и описание задачи

-
- setValueTiket(e.target.value)} - placeholder="Название задачи" - /> -
-
- setDescriptionTicket(e.target.value)} - placeholder="Описание задачи" - /> -
-
- -
- )} - {modalType === "editProject" && ( -
-
-

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

-
- setProjectName(e.target.value)} - /> -
-
- -
- )} - {modalType === "createProject" && ( -
-
-

{titleProject}

-
- setNameProject(e.target.value)} - /> -
- -
-
- )} - {modalType === "addSubtask" && ( -
-
-

- Вы добавляете подзадачу{" "} -

в колонку(id) задачи "{defautlInput}"

-

-

Введите текст

-
- -
-
- -
- )} - {modalType === "createColumn" && ( -
-
-

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

-
- setValueColumn(e.target.value)} - /> -
-
- -
- )} - {modalType === "editColumn" && ( -
-
-

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

-
- dispatch(setColumnName(e.target.value))} - /> -
-

Приоритет колонки

-
- dispatch(setColumnPriority(e.target.value))} - /> -
-
- -
- )} - - setActive(false)}> -
-
- ); -}; - -export default TrackerModal; diff --git a/src/components/UI/ModalTicket/ModalTicket.jsx b/src/components/UI/ModalTicket/ModalTicket.jsx deleted file mode 100644 index 973a46fa..00000000 --- a/src/components/UI/ModalTicket/ModalTicket.jsx +++ /dev/null @@ -1,571 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { useDispatch } from "react-redux"; -import { Link } from "react-router-dom"; - -import { apiRequest } from "../../../api/request"; -import archive from "../../../assets/icons/archive.svg"; -import arrow from "../../../assets/icons/arrows/arrowStart.png"; -import fullScreen from "../../../assets/icons/arrows/inFullScreen.svg"; -import category from "../../../assets/icons/category.svg"; -import close from "../../../assets/icons/closeProjectPersons.svg"; -import del from "../../../assets/icons/delete.svg"; -import edit from "../../../assets/icons/edit.svg"; -import file from "../../../assets/icons/fileModal.svg"; -import link from "../../../assets/icons/link.svg"; -import plus from "../../../assets/icons/plus.svg"; -import send from "../../../assets/icons/send.svg"; -import watch from "../../../assets/icons/watch.svg"; -import TrackerModal from "../../../components/Modal/TrackerModal/TrackerModal"; -import TrackerTaskComment from "../../../components/TrackerTaskComment/TrackerTaskComment"; -import { - modalToggle, - setProjectBoardFetch, -} from "../../../redux/projectsTrackerSlice"; -import { getCorrectRequestDate, urlForLocal } from "../../../utils/helper"; -import "./modalTicket.scss"; - -export const ModalTiсket = ({ - active, - setActive, - task, - projectId, - projectName, - projectUsers, -}) => { - const dispatch = useDispatch(); - const [addSubtask, setAddSubtask] = useState(false); - const [editOpen, setEditOpen] = useState(false); - const [inputsValue, setInputsValue] = useState({ - title: task.title, - description: task.description, - comment: "", - }); - const [comments, setComments] = useState([]); - const [dropListOpen, setDropListOpen] = useState(false); - const [dropListMembersOpen, setDropListMembersOpen] = useState(false); - const [executor, setExecutor] = useState(task.executor); - const [members, setMembers] = useState(task.taskUsers); - const [users, setUsers] = useState([]); - const [timerStart, setTimerStart] = useState(false); - const [timerInfo, setTimerInfo] = useState({}); - const [currentTimerCount, setCurrentTimerCount] = useState({ - hours: 0, - minute: 0, - seconds: 0, - }); - const [timerId, setTimerId] = useState(null); - - function deleteTask() { - apiRequest("/task/update-task", { - method: "PUT", - data: { - task_id: task.id, - status: 0, - }, - }).then(() => { - setActive(false); - dispatch(setProjectBoardFetch(projectId)); - }); - } - - function editTask() { - apiRequest("/task/update-task", { - method: "PUT", - data: { - task_id: task.id, - title: inputsValue.title, - description: inputsValue.description, - }, - }).then(() => { - dispatch(setProjectBoardFetch(projectId)); - }); - } - - function createComment() { - apiRequest("/comment/create", { - method: "POST", - data: { - text: inputsValue.comment, - entity_type: 2, - entity_id: task.id, - }, - }).then((res) => { - let newComment = res; - newComment.created_at = new Date(); - newComment.subComments = []; - setInputsValue((prevValue) => ({ ...prevValue, comment: "" })); - setComments((prevValue) => [...prevValue, newComment]); - }); - } - - function commentDelete(comment) { - setComments((prevValue) => - prevValue.filter((item) => item.id !== comment.id) - ); - if (comment.subComments.length) { - // promiseAll - comment.subComments.forEach((subComment) => { - apiRequest("/comment/update", { - method: "PUT", - data: { - comment_id: subComment.id, - status: 0, - }, - }).then(() => {}); - }); - } - } - - function addSubComment(commentId, subComment) { - const addSubComment = comments; - addSubComment.forEach((comment) => { - if (comment.id === commentId) { - comment.subComments.push(subComment); - } - }); - setComments(addSubComment); - } - - function subCommentDelete(subComment) { - const deleteSubComment = comments; - deleteSubComment.forEach((comment, index) => { - if (comment.id === subComment.parent_id) { - deleteSubComment[index].subComments = comment.subComments.filter( - (item) => item.id !== subComment.id - ); - } - }); - setComments([...deleteSubComment]); - } - - function startTaskTimer() { - apiRequest("/timer/create", { - method: "POST", - data: { - entity_type: 2, - entity_id: task.id, - created_at: getCorrectRequestDate(new Date()), - }, - }).then((res) => { - setTimerStart(true); - setTimerInfo(res); - startTimer(); - }); - } - - function stopTaskTimer() { - apiRequest("/timer/update", { - method: "PUT", - data: { - timer_id: timerInfo.id, - stopped_at: getCorrectRequestDate(new Date()), - }, - }).then(() => { - setTimerStart(false); - clearInterval(timerId); - }); - } - - function taskExecutor(person) { - apiRequest("/task/update-task", { - method: "PUT", - data: { - task_id: task.id, - executor_id: person.user_id, - }, - }).then((res) => { - setDropListOpen(false); - setExecutor(res.executor); - }); - } - - function deleteTaskExecutor() { - apiRequest("/task/update-task", { - method: "PUT", - data: { - task_id: task.id, - executor_id: 0, - }, - }).then(() => { - setExecutor(null); - }); - } - - function addMember(person) { - apiRequest("/task/add-user-to-task", { - method: "POST", - data: { - task_id: task.id, - user_id: person.user_id, - }, - }).then((res) => { - setDropListMembersOpen(false); - setMembers((prevValue) => [...prevValue, res]); - }); - } - - function deleteMember(person) { - apiRequest("/task/del-user", { - method: "DELETE", - data: { - task_id: task.id, - user_id: person.user_id, - }, - }).then(() => { - setMembers(members.filter((item) => item.user_id !== person.user_id)); - }); - } - - useEffect(() => { - apiRequest( - `/comment/get-by-entity?entity_type=2&entity_id=${task.id}` - ).then((res) => { - const comments = res.reduce((acc, cur) => { - if (!cur.parent_id) { - acc.push({ ...cur, subComments: [] }); - } else { - acc.forEach((item) => { - if (item.id === cur.parent_id) item.subComments.push(cur); - }); - } - return acc; - }, []); - setComments(comments); - }); - apiRequest(`/timer/get-by-entity?entity_type=2&entity_id=${task.id}`).then( - (res) => { - let timerSeconds = 0; - res.length && - res.forEach((time) => { - timerSeconds += time.deltaSeconds; - setCurrentTimerCount({ - hours: Math.floor(timerSeconds / 60 / 60), - minute: Math.floor((timerSeconds / 60) % 60), - seconds: timerSeconds % 60, - }); - updateTimerHours = Math.floor(timerSeconds / 60 / 60); - updateTimerMinute = Math.floor((timerSeconds / 60) % 60); - updateTimerSec = timerSeconds % 60; - if (!time.stopped_at) { - setTimerStart(true); - startTimer(); - setTimerInfo(time); - } - }); - } - ); - }, []); - - function startTimer() { - setTimerId( - setInterval(() => { - run(); - }, 1000) - ); - } - - let updateTimerSec = currentTimerCount.seconds, - updateTimerMinute = currentTimerCount.minute, - updateTimerHours = currentTimerCount.hours; - - function run() { - updateTimerSec++; - if (updateTimerSec > 60) { - updateTimerMinute++; - updateTimerSec = 0; - } - if (updateTimerMinute === 60) { - updateTimerMinute = 0; - updateTimerHours++; - } - - return setCurrentTimerCount({ - hours: updateTimerHours, - minute: updateTimerMinute, - seconds: updateTimerSec, - }); - } - - function correctTimerTime(time) { - if (time < 10) return `0${time}`; - if (time > 10) return time; - } - - useEffect(() => { - let ids = members.map((user) => user.user_id); - setUsers( - projectUsers.reduce((acc, cur) => { - if (!ids.includes(cur.user_id)) acc.push(cur); - return acc; - }, []) - ); - }, [members]); - - return ( -
setActive(false)} - > -
e.stopPropagation()} - > -
-

- - Проект: {projectName} - - - -

- -
- Задача - {editOpen ? ( - { - setInputsValue((prevValue) => ({ - ...prevValue, - title: e.target.value, - })); - }} - /> - ) : ( -
{inputsValue.title}
- )} -
- {editOpen ? ( - { - setInputsValue((prevValue) => ({ - ...prevValue, - description: e.target.value, - })); - }} - /> - ) : ( -

{inputsValue.description}

- )} - {/**/} -
-
-

- -

-

- - {0} - Файлов -

-
-
- { - setInputsValue((prevValue) => ({ - ...prevValue, - comment: e.target.value, - })); - }} - /> - -
-
- {comments.map((comment) => { - return ( - - ); - })} -
-
-
-
-
- setActive(false)}> - {task.title} -

Создатель : {task.user?.fio}

- - {executor ? ( -
-

Исполнитель: {executor.fio}

- avatar - deleteTaskExecutor()} - /> -
- ) : ( -
- - Добавить исполнителя - {dropListOpen && ( -
- setDropListOpen(false)} - /> - {projectUsers.map((person) => { - return ( -
taskExecutor(person)} - > - {person.user.fio} - -
- ); - })} -
- )} -
- )} - - {Boolean(members.length) && ( -
-

Участники:

-
- {members.map((member) => { - return ( -
-

{member.fio}

- - deleteMember(member)} - /> -
- ); - })} -
-
- )} - -
- - Добавить участников - {dropListMembersOpen && ( -
- setDropListMembersOpen(false)} - /> - {users.length ? ( - users.map((person) => { - return ( -
addMember(person)} - > - {person.user.fio} - -
- ); - }) - ) : ( -

Нет пользователей

- )} -
- )} -
-
- -
-
- - Длительность : -

- {correctTimerTime(currentTimerCount.hours)}: - {correctTimerTime(currentTimerCount.minute)}: - {correctTimerTime(currentTimerCount.seconds)} -

-
- - {timerStart ? ( - - ) : ( - - )} -
- -
-
{ - if (editOpen) { - setEditOpen(!editOpen); - editTask(); - } else { - setEditOpen(!editOpen); - } - }} - > - -

{editOpen ? "сохранить" : "редактировать"}

-
-
- -

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

-
-
- -

в архив

-
-
- -

удалить

-
-
-
-
- - -
- ); -}; - -export default ModalTiсket; diff --git a/src/components/UI/TicketFullScreen/TicketFullScreen.jsx b/src/components/UI/TicketFullScreen/TicketFullScreen.jsx deleted file mode 100644 index 6e5f2c59..00000000 --- a/src/components/UI/TicketFullScreen/TicketFullScreen.jsx +++ /dev/null @@ -1,528 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { useDispatch, useSelector } from "react-redux"; -import { Link, useNavigate, useParams } from "react-router-dom"; - -import { Footer } from "@components/Common/Footer/Footer"; -import { Loader } from "@components/Common/Loader/Loader"; - -import { apiRequest } from "../../../api/request"; -import TrackerTaskComment from "../../../components/TrackerTaskComment/TrackerTaskComment"; -import { getCorrectRequestDate, urlForLocal } from "../../../helper"; -import archive2 from "../../../images/archive.svg"; -import archive from "../../../images/archiveTracker.svg"; -import arrow from "../../../images/arrowCalendar.png"; -import arrow2 from "../../../images/arrowStart.png"; -import close from "../../../images/closeProjectPersons.svg"; -import del from "../../../images/delete.svg"; -import edit from "../../../images/edit.svg"; -import file from "../../../images/fileModal.svg"; -import link from "../../../images/link.svg"; -import plus from "../../../images/plus.svg"; -import send from "../../../images/send.svg"; -import project from "../../../images/trackerProject.svg"; -import tasks from "../../../images/trackerTasks.svg"; -import watch from "../../../images/watch.png"; -import { - deletePersonOnProject, - getBoarderLoader, - getProjectBoard, - modalToggle, - setProjectBoardFetch, - setToggleTab, -} from "../../../redux/projectsTrackerSlice"; -import TrackerModal from "../../Modal/TrackerModal/TrackerModal"; -import { Navigation } from "../../Navigation/Navigation"; -import { ProfileBreadcrumbs } from "../../ProfileBreadcrumbs/ProfileBreadcrumbs"; -import { ProfileHeader } from "../../ProfileHeader/ProfileHeader"; -import "./ticketFullScreen.scss"; - -export const TicketFullScreen = () => { - const [modalAddWorker, setModalAddWorker] = useState(false); - const ticketId = useParams(); - const dispatch = useDispatch(); - const navigate = useNavigate(); - const projectBoard = useSelector(getProjectBoard); - const boardLoader = useSelector(getBoarderLoader); - const [taskInfo, setTaskInfo] = useState({}); - const [editOpen, setEditOpen] = useState(false); - const [inputsValue, setInputsValue] = useState({}); - const [loader, setLoader] = useState(true); - const [comments, setComments] = useState([]); - const [personListOpen, setPersonListOpen] = useState(false); - const [timerStart, setTimerStart] = useState(false); - const [timerInfo, setTimerInfo] = useState({}); - - useEffect(() => { - apiRequest(`/task/get-task?task_id=${ticketId.id}`).then((taskInfo) => { - setTaskInfo(taskInfo); - setInputsValue({ - title: taskInfo.title, - description: taskInfo.description, - comment: "", - }); - apiRequest( - `/comment/get-by-entity?entity_type=2&entity_id=${taskInfo.id}` - ).then((res) => { - const comments = res.reduce((acc, cur) => { - if (!cur.parent_id) { - acc.push({ ...cur, subComments: [] }); - } else { - acc.forEach((item) => { - if (item.id === cur.parent_id) item.subComments.push(cur); - }); - } - return acc; - }, []); - setComments(comments); - }); - taskInfo.timers.forEach((time) => { - if (!time.stopped_at) { - setTimerStart(true); - setTimerInfo(time); - } - }); - dispatch(setProjectBoardFetch(taskInfo.project_id)); - setLoader(boardLoader); - }); - }, []); - - function deleteTask() { - apiRequest("/task/update-task", { - method: "PUT", - data: { - task_id: ticketId.id, - status: 0, - }, - }).then(() => { - navigate(`/tracker/project/${taskInfo.project_id}`); - }); - } - - function editTask() { - apiRequest("/task/update-task", { - method: "PUT", - data: { - task_id: taskInfo.id, - title: inputsValue.title, - description: inputsValue.description, - }, - }).then(() => {}); - } - - function createComment() { - apiRequest("/comment/create", { - method: "POST", - data: { - text: inputsValue.comment, - entity_type: 2, - entity_id: taskInfo.id, - }, - }).then((res) => { - let newComment = res; - newComment.created_at = new Date(); - newComment.subComments = []; - setInputsValue((prevValue) => ({ ...prevValue, comment: "" })); - setComments((prevValue) => [...prevValue, newComment]); - }); - } - - function startTaskTimer() { - apiRequest("/timer/create", { - method: "POST", - data: { - entity_type: 2, - entity_id: taskInfo.id, - created_at: getCorrectRequestDate(new Date()), - }, - }).then((res) => { - setTimerStart(true); - setTimerInfo(res); - }); - } - - function stopTaskTimer() { - apiRequest("/timer/update", { - method: "PUT", - data: { - timer_id: timerInfo.id, - stopped_at: getCorrectRequestDate(new Date()), - }, - }).then(() => setTimerStart(false)); - } - - function deletePerson(userId) { - apiRequest("/project/del-user", { - method: "DELETE", - data: { - project_id: projectBoard.id, - user_id: userId, - }, - }).then(() => { - dispatch(deletePersonOnProject(userId)); - }); - } - - function commentDelete(comment) { - setComments((prevValue) => - prevValue.filter((item) => item.id !== comment.id) - ); - if (comment.subComments.length) { - comment.subComments.forEach((subComment) => { - apiRequest("/comment/update", { - method: "PUT", - data: { - comment_id: subComment.id, - status: 0, - }, - }).then(() => {}); - }); - } - } - - function addSubComment(commentId, subComment) { - const addSubComment = comments; - addSubComment.forEach((comment) => { - if (comment.id === commentId) { - comment.subComments.push(subComment); - } - }); - setComments(addSubComment); - } - - function subCommentDelete(subComment) { - const deleteSubComment = comments; - deleteSubComment.forEach((comment, index) => { - if (comment.id === subComment.parent_id) { - deleteSubComment[index].subComments = comment.subComments.filter( - (item) => item.id !== subComment.id - ); - } - }); - setComments([...deleteSubComment]); - } - - const toggleTabs = (index) => { - dispatch(setToggleTab(index)); - }; - - return ( -
- - -
-
- -

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

-
-
-
-
- toggleTabs(1)} - > - img -

Проекты

- - toggleTabs(2)} - > - img -

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

- - toggleTabs(3)} - > - img -

Архив

- -
- {loader ? ( - - ) : ( - <> -
-
-
-

Проект : {projectBoard.name}

- - - -
- {/*avatar*/} - {/*avatar*/} - - {projectBoard.projectUsers?.length} - - { - setPersonListOpen(true); - }} - > - + - -

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

- {personListOpen && ( -
- close setPersonListOpen(false)} - /> -
- {projectBoard.projectUsers?.length} - участник -
-
- В проекте - “{projectBoard.name}” -
-
- {projectBoard.projectUsers?.map((person) => { - return ( -
- avatar - {person.user.fio} - delete deletePerson(person.user_id)} - /> -
- ); - })} -
-
{ - dispatch(modalToggle("addWorker")); - setModalAddWorker(true); - setPersonListOpen(false); - }} - > - + -

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

-
-
- )} -
- -
-

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

- arrow -
- -
-
-
-
-
-
- Задача - {editOpen ? ( - { - setInputsValue((prevValue) => ({ - ...prevValue, - title: e.target.value, - })); - }} - /> - ) : ( -
{inputsValue.title}
- )} -
- {editOpen ? ( - { - setInputsValue((prevValue) => ({ - ...prevValue, - description: e.target.value, - })); - }} - /> - ) : ( -

{inputsValue.description}

- )} - {/**/} -
-
-

- -

-

- - {0} - Файлов -

-
-
- { - setInputsValue((prevValue) => ({ - ...prevValue, - comment: e.target.value, - })); - }} - /> - -
-
- {comments.map((comment) => { - return ( - - ); - })} -
-
-
-
-
-

- Создатель : {taskInfo.user?.fio} -

-
- {Boolean(taskInfo.taskUsers?.length) && - taskInfo.taskUsers.map((worker, index) => { - return ( -
- -

{worker.name}

-
- ); - })} -
- -
- - Добавить исполнителя -
-
- - Добавить участников -
-
- -
-
- - Длительность : -

{"0:00:00"}

-
- - {timerStart ? ( - - ) : ( - - )} -
- -
-
{ - if (editOpen) { - setEditOpen(!editOpen); - editTask(); - } else { - setEditOpen(!editOpen); - } - }} - > - -

{editOpen ? "сохранить" : "редактировать"}

-
-
- -

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

-
-
- -

в архив

-
-
- -

удалить

-
-
-
-
- - )} -
-
-
- ); -}; - -export default TicketFullScreen; diff --git a/src/pages/ProjectTracker/ProjectTracker.js b/src/pages/ProjectTracker/ProjectTracker.js index 3219ed46..8cc6ed4f 100644 --- a/src/pages/ProjectTracker/ProjectTracker.js +++ b/src/pages/ProjectTracker/ProjectTracker.js @@ -28,6 +28,7 @@ import { Footer } from "@components/Common/Footer/Footer"; import { Loader } from "@components/Common/Loader/Loader"; import ModalTicket from "@components/Modal/Tracker/ModalTicket/ModalTicket"; import TrackerModal from "@components/Modal/Tracker/TrackerModal/TrackerModal"; +// import TrackerModal from "@components/Modal/TrackerModal/TrackerModal"; import { Navigation } from "@components/Navigation/Navigation"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; @@ -296,7 +297,7 @@ export const ProjectTracker = () => {
-

Проект : {projectBoard.name}

+
Проект : {projectBoard.name}