e.stopPropagation()}
>
diff --git a/src/components/Common/ModalLayout/modalLayout.scss b/src/components/Common/ModalLayout/modalLayout.scss
index 8e775681..a4578eda 100644
--- a/src/components/Common/ModalLayout/modalLayout.scss
+++ b/src/components/Common/ModalLayout/modalLayout.scss
@@ -2,7 +2,7 @@
z-index: 9;
height: 100%;
width: 100%;
- background-color: rgba(0, 0, 0, 0.11);
+ background-color: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0;
left: 0;
@@ -104,6 +104,11 @@
}
}
+ .createTiketProject {
+ padding: 0;
+ background: white;
+ }
+
.ck-editor {
width: 100% !important;
}
diff --git a/src/components/Modal/AcceptModal/acceptModal.scss b/src/components/Modal/AcceptModal/acceptModal.scss
index 5f1abce2..aac58c6d 100644
--- a/src/components/Modal/AcceptModal/acceptModal.scss
+++ b/src/components/Modal/AcceptModal/acceptModal.scss
@@ -1,7 +1,7 @@
.backDrop {
height: 100%;
width: 100%;
- background-color: rgba(0, 0, 0, 0.11);
+ background-color: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0;
left: 0;
diff --git a/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx b/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx
index 363611e8..fc0d2d81 100644
--- a/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx
+++ b/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx
@@ -113,6 +113,13 @@ export const ModalTiсket = ({
}
function editTask() {
+ if (!inputsValue.title || !inputsValue.description) {
+ return showNotification({
+ show: true,
+ text: "Заполните поля",
+ type: "error",
+ });
+ }
apiRequest("/task/update-task", {
method: "PUT",
data: {
@@ -121,6 +128,7 @@ export const ModalTiсket = ({
description: inputsValue.description,
},
}).then((res) => {
+ setEditOpen(!editOpen);
dispatch(setProjectBoardFetch(projectId));
showNotification({
show: true,
@@ -809,7 +817,6 @@ export const ModalTiсket = ({
className={editOpen ? "edit" : ""}
onClick={() => {
if (editOpen) {
- setEditOpen(!editOpen);
editTask();
} else {
setEditOpen(!editOpen);
diff --git a/src/components/Modal/Tracker/ModalTicket/modalTicket.scss b/src/components/Modal/Tracker/ModalTicket/modalTicket.scss
index 32ea56a6..92a9b29d 100644
--- a/src/components/Modal/Tracker/ModalTicket/modalTicket.scss
+++ b/src/components/Modal/Tracker/ModalTicket/modalTicket.scss
@@ -2,7 +2,7 @@
z-index: 9;
height: 100%;
width: 100%;
- background-color: rgba(0, 0, 0, 0.11);
+ background-color: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0;
left: 0;
@@ -126,12 +126,24 @@
}
.taskDescription {
- display: -webkit-box;
- max-width: 550px;
- overflow: hidden;
- text-overflow: ellipsis;
- -webkit-line-clamp: 7;
- -webkit-box-orient: vertical;
+ max-height: 150px;
+ overflow-y: auto;
+ padding-right: 10px;
+
+ &::-webkit-scrollbar {
+ width: 4px;
+ border-radius: 10px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #cbd9f9;
+ border-radius: 10px;
+ }
+
+ &::-webkit-scrollbar-track {
+ background: #c5c0c6;
+ border-radius: 10px;
+ }
}
.fullName {
diff --git a/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx b/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx
index a624be02..bc5162e8 100644
--- a/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx
+++ b/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx
@@ -173,6 +173,13 @@ export const TicketFullScreen = () => {
}
function editTask() {
+ if (!inputsValue.title || !inputsValue.description) {
+ return showNotification({
+ show: true,
+ text: "Заполните поля",
+ type: "error",
+ });
+ }
apiRequest("/task/update-task", {
method: "PUT",
data: {
@@ -186,6 +193,7 @@ export const TicketFullScreen = () => {
text: "Изменения сохранены",
type: "success",
});
+ setEditOpen(!editOpen);
});
}
@@ -985,7 +993,6 @@ export const TicketFullScreen = () => {
className={editOpen ? "edit" : ""}
onClick={() => {
if (editOpen) {
- setEditOpen(!editOpen);
editTask();
} else {
setEditOpen(!editOpen);
diff --git a/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx b/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx
index 23a6070d..efddad92 100644
--- a/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx
+++ b/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx
@@ -1,6 +1,9 @@
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
import { CKEditor } from "@ckeditor/ckeditor5-react";
+import ru from "date-fns/locale/ru";
import React, { useEffect, useState } from "react";
+import DatePicker, { registerLocale } from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
import { useDispatch, useSelector } from "react-redux";
import { getProfileInfo } from "@redux/outstaffingSlice";
@@ -19,20 +22,26 @@ import {
setProjectBoardFetch,
} from "@redux/projectsTrackerSlice";
-import { urlForLocal } from "@utils/helper";
+import { getCorrectRequestDate, urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { useNotification } from "@hooks/useNotification";
+import { getCorrectDate } from "@components/Calendar/calendarHelper";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
+import arrowCreateTask from "assets/icons/arrows/arrowCreateTask.svg";
+import arrowRight from "assets/icons/arrows/arrowRightCreateTask.svg";
import arrowDown from "assets/icons/arrows/selectArrow.png";
+import calendarImg from "assets/icons/createTaskCalendar.svg";
import avatarMok from "assets/images/avatarMok.png";
import "./trackerModal.scss";
+registerLocale("ru", ru);
+
export const TrackerModal = ({
active,
setActive,
@@ -70,6 +79,9 @@ export const TrackerModal = ({
const [selectColumnPriorityOpen, setSelectColumnPriorityOpen] =
useState(false);
const { showNotification } = useNotification();
+ const [deadLineDate, setDeadLineDate] = useState("");
+ const [datePickerOpen, setDatePickerOpen] = useState(false);
+ const [startDate, setStartDate] = useState(new Date());
function createTab() {
if (!valueColumn) {
@@ -113,6 +125,7 @@ export const TrackerModal = ({
user_id: localStorage.getItem("id"),
column_id: selectedTab,
priority: priorityTask,
+ dead_line: deadLineDate ? getCorrectRequestDate(deadLineDate) : "",
},
}).then((res) => {
if (res.status === 500) {
@@ -133,15 +146,16 @@ export const TrackerModal = ({
dispatch(setProjectBoardFetch(projectBoard.id));
setActive(false);
setValueTiket("");
- setDescriptionTicket("Описание задачи");
+ setDescriptionTicket("");
setSelectedExecutorTask("Выберите исполнителя задачи");
});
} else {
setActive(false);
setValueTiket("");
- setDescriptionTicket("Описание задачи");
+ setDescriptionTicket("");
dispatch(setProjectBoardFetch(projectBoard.id));
}
+ setDeadLineDate("");
showNotification({
show: true,
text: "Задача создана",
@@ -296,6 +310,7 @@ export const TrackerModal = ({
{
// setSelectWorkersOpen(false);
// }}
@@ -388,93 +403,140 @@ export const TrackerModal = ({
{modalType === "createTiketProject" && (
<>
-
Введите название и описание задачи
-
- setValueTiket(e.target.value)}
- placeholder="Название задачи"
- />
-
-
{
- const data = editor.getData();
- setDescriptionTicket(data);
- }}
- />
- setSelectExecutorTaskOpen(!selectExecutorTaskOpen)}
- className={
- selectExecutorTaskOpen
- ? "select__executor select__executor--open"
- : "select__executor"
- }
- >
-
- {selectedExecutorTask.user_id ? (
- <>
-
{selectedExecutorTask.user.fio}
-
- >
- ) : (
-
{selectedExecutorTask}
- )}
+
+
Этап
+
+
Backlog
+
-
- {selectExecutorTaskOpen && (
-
- {correctProjectUsers.length ? (
- correctProjectUsers.map((person) => {
- return (
-
setSelectedExecutorTask(person)}
- className="executor"
- key={person.user_id}
- >
-
{person.user.fio}
-
-
- );
- })
- ) : (
-
Нет пользователей
+
+
+
+
Введите название и описание задачи
+
+ setValueTiket(e.target.value)}
+ placeholder="Название задачи"
+ />
+
+
{
+ const data = editor.getData();
+ setDescriptionTicket(data);
+ }}
+ />
+
+
+
+
Создатель : {profileInfo?.fio}
+
+
+
+ setSelectExecutorTaskOpen(!selectExecutorTaskOpen)
+ }
+ className={
+ selectExecutorTaskOpen
+ ? "select__executor select__executor--open"
+ : "select__executor"
+ }
+ >
+
+ {selectedExecutorTask.user_id ? (
+ <>
+
{selectedExecutorTask.user.fio}
+
+ >
+ ) : (
+
{selectedExecutorTask}
+ )}
+
+
+ {selectExecutorTaskOpen && (
+
+ {correctProjectUsers.length ? (
+ correctProjectUsers.map((person) => {
+ return (
+
setSelectedExecutorTask(person)}
+ className="executor"
+ key={person.user_id}
+ >
+
{person.user.fio}
+
+
+ );
+ })
+ ) : (
+
Нет пользователей
+ )}
+
)}
- )}
+
+
+
Срок исполнения
+
+
setDatePickerOpen(!datePickerOpen)}>
+ {deadLineDate
+ ? getCorrectDate(deadLineDate)
+ : "Дата не выбрана"}
+
+
{
+ setDatePickerOpen(false);
+ setStartDate(date);
+ setDeadLineDate(date);
+ }}
+ />
+
+
+ Создать
+
+
-
- Создать
-
>
)}
{modalType === "editProject" && (
diff --git a/src/components/Modal/Tracker/TrackerModal/trackerModal.scss b/src/components/Modal/Tracker/TrackerModal/trackerModal.scss
index 49570f96..8ff8f335 100644
--- a/src/components/Modal/Tracker/TrackerModal/trackerModal.scss
+++ b/src/components/Modal/Tracker/TrackerModal/trackerModal.scss
@@ -3,7 +3,7 @@
z-index: 9;
height: 100%;
width: 100%;
- background-color: rgba(0, 0, 0, 0.11);
+ background-color: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0;
left: 0;
@@ -145,7 +145,7 @@
align-items: center;
span {
- max-width: 205px;
+ max-width: 250px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
@@ -162,9 +162,9 @@
&__dropDown {
position: absolute;
- background: white;
+ background: #F1F1F1;
border-radius: 8px;
- top: 50px;
+ top: 55px;
left: 0;
width: 100%;
padding: 9.5px 12px;
@@ -275,6 +275,235 @@
transform: rotate(180deg);
}
}
+
+ .createTaskHead {
+ width: 100%;
+ padding: 30px 42px 18px;
+ display: flex;
+ column-gap: 9.5px;
+ align-items: center;
+ background: #F1F1F1;
+ border-radius: 22px 22px 0 0;
+
+ span {
+ font-size: 15px;
+ color: #000000;
+ }
+
+ &__selectColumn {
+ display: flex;
+ column-gap: 8px;
+ cursor: pointer;
+
+ span {
+ padding: 3.75px 16.25px 5.75px;
+ color: #FFFFFF;
+ font-size: 12px;
+ font-weight: 500;
+ background: #52B709;
+ border-radius: 12px;
+ }
+ }
+ }
+
+ .createTaskBody {
+ padding: 13px 43px 46px 42px;
+ display: flex;
+ column-gap: 55px;
+
+ &__left {
+ display: flex;
+ flex-direction: column;
+ h4 {
+ color: #263238 !important;
+ font-size: 16px;
+ line-height: 19.2px;
+ margin-bottom: 25px;
+ }
+
+ .input-container {
+ background: #F1F1F1;
+ margin: 0 0 17px;
+ width: 393px;
+ height: 47px;
+
+ input {
+ background: #F1F1F1;
+ color: #000000;
+ font-size: 15px;
+ line-height: 18px;
+ font-weight: 300;
+ }
+ }
+
+ .ck-editor {
+ border: 1px solid #DDDDDD;
+ border-radius: 8px;
+ }
+
+ .ck-editor__editable.ck-rounded-corners {
+ min-height: 110px;
+ max-height: 110px;
+ }
+ }
+
+ &__right {
+ display: flex;
+ flex-direction: column;
+ align-items: start;
+ justify-content: end;
+
+ &__owner {
+ display: flex;
+ align-items: center;
+ column-gap: 9.5px;
+ margin-bottom: 30px;
+ p {
+ color: #2D4A17;
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 32px;
+ }
+
+ img {
+ width: 22px;
+ height: 22px;
+ }
+ }
+
+ .select__executor {
+ background: #F1F1F1;
+ width: 393px;
+ height: 47px;
+ font-weight: 300;
+ line-height: 18px;
+ font-size: 15px;
+ margin-bottom: 17.5px;
+ z-index: 100;
+ }
+
+ .button-add {
+ margin: 0;
+ width: 185px;
+ height: 42px;
+ color: #FFFFFF;
+ font-weight: 500;
+ font-size: 16px;
+ }
+
+ &__deadLine {
+ display: flex;
+ align-items: center;
+ column-gap: 18px;
+ font-weight: 300;
+ line-height: 18px;
+ font-size: 15px;
+ position: relative;
+ margin-bottom: 22px;
+
+ span {
+ color: #6F6F6F;
+ }
+
+ p {
+ cursor: pointer;
+ color: #000000;
+ }
+
+ .datePicker {
+ visibility: hidden;
+ height: 0;
+ padding: 0;
+ width: 0;
+ position: absolute;
+ }
+
+ .react-datepicker-wrapper {
+ position: absolute;
+ top: -15px;
+ max-width: 120px;
+ right: 0;
+ }
+
+ .react-datepicker {
+ border: 1px solid #e8ede4;
+ border-radius: 8px;
+ }
+
+ .react-datepicker-popper {
+ top: 20px !important;
+ left: -110px !important;
+ z-index: 10;
+ }
+
+ .react-datepicker__current-month {
+ font-size: 18px;
+ font-family: "LabGrotesque", sans-serif;
+ text-transform: capitalize;
+ padding-bottom: 8px;
+ }
+
+ .react-datepicker__navigation-icon {
+ width: 20px;
+ height: 20px;
+ border-radius: 50px;
+ border: 2px solid #cbd1d2;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ font-size: 0;
+
+ &:hover {
+ background-color: white;
+ }
+ }
+
+ .react-datepicker__navigation-icon--next::before {
+ border-width: 2px 2px 0 0;
+ top: auto;
+ left: 4px;
+ height: 6px;
+ width: 6px;
+ }
+
+ .react-datepicker__navigation-icon--previous::before {
+ border-width: 2px 2px 0 0;
+ top: 5px;
+ left: 7px;
+ height: 6px;
+ width: 6px;
+ }
+
+ .react-datepicker__header {
+ padding: 5px 0 10px;
+ border-bottom: 1px solid #baacc0;
+ }
+
+ .react-datepicker__day {
+ font-size: 16px;
+ width: 35px;
+ font-family: "LabGrotesque", sans-serif;
+ border-radius: 50px;
+ padding: 7px;
+ }
+
+ .react-datepicker__day-name {
+ font-size: 18px;
+ width: 35px;
+ font-weight: 500;
+ font-family: "LabGrotesque", sans-serif;
+ }
+
+ .react-datepicker__triangle {
+ left: 85px !important;
+
+ &:before {
+ border: 1px solid #e8ede4;
+ }
+ }
+ }
+ }
+ }
}
.name-project {
diff --git a/src/components/Modal/TrackerModal/trackerModal.scss b/src/components/Modal/TrackerModal/trackerModal.scss
index 6917c1b2..3ebfe8c2 100644
--- a/src/components/Modal/TrackerModal/trackerModal.scss
+++ b/src/components/Modal/TrackerModal/trackerModal.scss
@@ -2,7 +2,7 @@
z-index: 9;
height: 100%;
width: 100%;
- background-color: rgba(0, 0, 0, 0.11);
+ background-color: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0;
left: 0;
diff --git a/src/components/SliderWorkers/SliderWorkers.jsx b/src/components/SliderWorkers/SliderWorkers.jsx
index 7167a8e7..a79a82fa 100644
--- a/src/components/SliderWorkers/SliderWorkers.jsx
+++ b/src/components/SliderWorkers/SliderWorkers.jsx
@@ -6,6 +6,10 @@ import "slick-carousel/slick/slick.css";
import BaseButton from "@components/Common/BaseButton/BaseButton";
+import avatarMockFirst from "assets/images/mock/avatarMoсk3.png";
+import avatarMockSecond from "assets/images/mock/avatarMoсk4.png";
+import avatarMockThird from "assets/images/mock/avatarMoсk5.png";
+import avatarMockFourth from "assets/images/mock/avatarMoсk6.png";
import mockWorker from "assets/images/mock/mokPerson.png";
import "./sliderWorkers.scss";
@@ -17,19 +21,19 @@ export const SliderWorkers = ({ title, titleInfo, subTitle }) => {
skils: "React / Vue Front end, Middle разработчик",
},
{
- avatar: mockWorker,
+ avatar: avatarMockFirst,
skils: "Vue / React Front end, Senior разработчик",
},
{
- avatar: mockWorker,
+ avatar: avatarMockSecond,
skils: "NodeJs Fullstack, Middle разработчик",
},
{
- avatar: mockWorker,
+ avatar: avatarMockThird,
skils: "React / Vue Front end, Middle разработчик",
},
{
- avatar: mockWorker,
+ avatar: avatarMockFourth,
skils: "React / PHP Fullstack, Middle разработчик",
},
]);
diff --git a/src/components/SliderWorkers/sliderWorkers.scss b/src/components/SliderWorkers/sliderWorkers.scss
index 9b538b3d..8bf7a978 100644
--- a/src/components/SliderWorkers/sliderWorkers.scss
+++ b/src/components/SliderWorkers/sliderWorkers.scss
@@ -61,10 +61,11 @@
}
p {
- font-size: 15px;
+ font-size: 17px;
+ font-weight: 700;
line-height: 22px;
color: black;
- width: 160px;
+ width: 210px;
}
&__resume {
diff --git a/src/pages/AuthForDevelopers/AuthForDevelopers.jsx b/src/pages/AuthForDevelopers/AuthForDevelopers.jsx
index 7cb5da45..d8775259 100644
--- a/src/pages/AuthForDevelopers/AuthForDevelopers.jsx
+++ b/src/pages/AuthForDevelopers/AuthForDevelopers.jsx
@@ -69,7 +69,7 @@ const AuthForDevelopers = () => {
@@ -93,7 +93,7 @@ const AuthForDevelopers = () => {
{/*
*/}
- 20 Специалистов
+ 300 Специалистов
diff --git a/src/pages/ProjectTracker/ProjectTracker.js b/src/pages/ProjectTracker/ProjectTracker.js
index f5fdca57..e7313046 100644
--- a/src/pages/ProjectTracker/ProjectTracker.js
+++ b/src/pages/ProjectTracker/ProjectTracker.js
@@ -574,7 +574,7 @@ export const ProjectTracker = () => {
selectedTabTask(
column.id,
projectBoard?.columns && column.tasks.length
- ? column.tasks.at(-1).priority + 1
+ ? column.tasks[0].priority - 1
: 1
);
}}