Compare commits

..

No commits in common. "5d03502e5c48a3283f44d7a61a8116d67b0bdbfc" and "05f966b87717bd9334f8d0095cc23c84bf0e24b8" have entirely different histories.

70 changed files with 536 additions and 537 deletions

View File

@ -3,7 +3,6 @@
"semi": true,
"printWidth": 80,
"useTabs": false,
"trailingComma" : "none",
"importOrder": [
"^@react/(.*)$",
"^@redux/(.*)$",

View File

@ -1,5 +1,5 @@
module.exports = {
"postcss-preset-env": {
browsers: "last 2 versions"
}
browsers: "last 2 versions",
},
};

View File

@ -1,5 +1,5 @@
import axios from "axios";
export default axios.create({
baseURL: process.env.REACT_APP_API_URL
baseURL: process.env.REACT_APP_API_URL,
});

View File

@ -6,7 +6,7 @@ const instance = axios.create({
baseURL: process.env.REACT_APP_API_URL,
validateStatus(status) {
return status;
}
},
});
export const apiRequest = (
@ -17,8 +17,8 @@ export const apiRequest = (
data,
headers = {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json"
}
"Content-Type": "application/json",
},
} = {}
) => {
const fullHeaders = { ...headers, ...getToken() };
@ -30,7 +30,7 @@ export const apiRequest = (
method,
params,
data,
headers: { ...fullHeaders }
headers: { ...fullHeaders },
})
.then(
(response) =>

View File

@ -12,7 +12,7 @@ const ArchiveTasksItem = ({ task, index }) => {
<p
className="date"
dangerouslySetInnerHTML={{
__html: task.description
__html: task.description,
}}
/>
</td>

View File

@ -51,7 +51,7 @@ export const AuthBox = ({ title }) => {
dispatch(loading(true));
apiRequest("/user/login", {
method: "POST",
data: formData
data: formData,
}).then((res) => {
if (!res.access_token) {
setError("Введены некорректные данные для входа");

View File

@ -86,7 +86,7 @@ export function getCorrectDate(day) {
"сентября",
"октября",
"ноября",
"декабря"
"декабря",
];
return `${new Date(day).getDate()} ${
months[new Date(day).getMonth()]

View File

@ -4,7 +4,7 @@ import { Link, Navigate, useNavigate, useParams } from "react-router-dom";
import {
currentCandidate,
selectCurrentCandidate
selectCurrentCandidate,
} from "@redux/outstaffingSlice";
import { LEVELS, SKILLS } from "@utils/constants";
@ -58,7 +58,7 @@ const Candidate = () => {
const styles = {
classes: "",
header: "",
img: ""
img: "",
};
switch (Number(position_id)) {
@ -100,14 +100,14 @@ const Candidate = () => {
{ name: "Главная", link: "/profile" },
{
name: "Каталог свободных специалистов",
link: "/profile/catalog"
link: "/profile/catalog",
},
{
name: `${currentCandidateObj.specification} ${
SKILLS[currentCandidateObj.position_id]
}, ${LEVELS[currentCandidateObj.level]}`,
link: `/candidate/${currentCandidateObj.id}`
}
link: `/candidate/${currentCandidateObj.id}`,
},
]}
/>

View File

@ -34,7 +34,7 @@ const CandidateSidebar = ({ candidate, setActiveSnippet, activeSnippet }) => {
let levelAspt = {
spec: candidate.specification,
skils: SKILLS[candidate.position_id],
level: LEVELS[candidate.level]
level: LEVELS[candidate.level],
};
return (

View File

@ -15,8 +15,8 @@ const FileTracker = ({ file, setDeletedTask, taskId }) => {
file_id: file.id,
entity_type: 2,
entity_id: taskId,
status: 0
}
status: 0,
},
}).then(() => {
setDeletedTask(file);
});

View File

@ -22,7 +22,7 @@ const Form = () => {
const [data, setData] = useState({
email: "",
phone: "",
comment: ""
comment: "",
});
const [isFetching, setIsFetching] = useState(false);
@ -40,7 +40,7 @@ const Form = () => {
: () => {
setStatus(null);
navigate(`/candidate/${urlParams.id}`);
}
},
});
};
@ -55,7 +55,7 @@ const Form = () => {
setData((prev) => ({
...prev,
[id]: value
[id]: value,
}));
};
@ -73,8 +73,8 @@ const Form = () => {
method: "POST",
params: {
profile_id: urlParams.id,
...data
}
...data,
},
}).then((res) => {
setStatus(res);
setIsFetching(false);

View File

@ -23,7 +23,7 @@ export const FreeDevelopers = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/auth" },
{ name: "Свободные разработчики", link: "/worker" }
{ name: "Свободные разработчики", link: "/worker" },
]}
/>

View File

@ -18,13 +18,13 @@ export const ModalRegistration = ({ active, setActive }) => {
const [inputsValue, setInputsValue] = useState({
userName: "",
email: "",
password: ""
password: "",
});
const [inputsError, setInputsError] = useState({
name: false,
email: false,
password: false
password: false,
});
const [loader, setLoader] = useState(false);
@ -68,22 +68,22 @@ export const ModalRegistration = ({ active, setActive }) => {
data: {
username: inputsValue.userName,
email: inputsValue.email,
password: inputsValue.password
}
password: inputsValue.password,
},
}).then((data) => {
setLoader(false);
if (!data) {
showNotification({
show: true,
text: "Аккаунт с таким логином или email уже существует",
type: "error"
type: "error",
});
} else {
closeModal();
showNotification({
show: true,
text: "Аккаунт успешно создан",
type: "success"
type: "success",
});
}
});
@ -93,12 +93,12 @@ export const ModalRegistration = ({ active, setActive }) => {
setInputsValue({
userName: "",
email: "",
password: ""
password: "",
});
setInputsError({
name: false,
email: false,
password: false
password: false,
});
setActive(false);
};
@ -122,11 +122,11 @@ export const ModalRegistration = ({ active, setActive }) => {
setInputsError({
name: false,
email: false,
password: false
password: false,
});
setInputsValue((prevValue) => ({
...prevValue,
userName: e.target.value
userName: e.target.value,
}));
}}
value={inputsValue.userName}
@ -143,11 +143,11 @@ export const ModalRegistration = ({ active, setActive }) => {
setInputsError({
name: false,
email: false,
password: false
password: false,
});
setInputsValue((prevValue) => ({
...prevValue,
email: e.target.value
email: e.target.value,
}));
}}
value={inputsValue.email}
@ -167,11 +167,11 @@ export const ModalRegistration = ({ active, setActive }) => {
setInputsError({
name: false,
email: false,
password: false
password: false,
});
setInputsValue((prevValue) => ({
...prevValue,
password: e.target.value
password: e.target.value,
}));
}}
value={inputsValue.password}
@ -188,11 +188,11 @@ export const ModalRegistration = ({ active, setActive }) => {
setInputsError({
name: false,
email: false,
password: false
password: false,
});
setInputsValue((prevValue) => ({
...prevValue,
password: e.target.value
password: e.target.value,
}));
}}
value={inputsValue.password}

View File

@ -17,13 +17,13 @@ export const ModalResetPassword = ({ active, setActive }) => {
const [inputsValue, setInputsValue] = useState({
email: "",
token: "",
password: ""
password: "",
});
const [inputsError, setInputsError] = useState({
email: false,
password: false,
token: false
token: false,
});
const validateEmail = (email) => {
@ -40,7 +40,7 @@ export const ModalResetPassword = ({ active, setActive }) => {
setInputsValue({
email: "",
token: "",
password: ""
password: "",
});
};
@ -51,22 +51,22 @@ export const ModalResetPassword = ({ active, setActive }) => {
return showNotification({
show: true,
text: "Введите корректный e-mail",
type: "error"
type: "error",
});
}
setLoader(true);
apiRequest("/register/request-password-reset", {
method: "POST",
data: {
email: inputsValue.email
}
email: inputsValue.email,
},
}).then((data) => {
setLoader(false);
if (data) {
showNotification({
show: true,
text: "Письмо отправлено Вам на почту",
type: "success"
type: "success",
});
setStep(true);
}
@ -77,12 +77,12 @@ export const ModalResetPassword = ({ active, setActive }) => {
setInputsError((prevValue) => ({
...prevValue,
password: true,
token: true
token: true,
}));
return showNotification({
show: true,
text: "Введите данные",
type: "error"
type: "error",
});
}
if (inputsValue.password.length < 6) {
@ -94,15 +94,15 @@ export const ModalResetPassword = ({ active, setActive }) => {
method: "POST",
data: {
token: inputsValue.token,
password: inputsValue.password
}
password: inputsValue.password,
},
}).then((data) => {
setLoader(false);
if (data.code === 0) {
showNotification({
show: true,
text: "Введите корректные данные",
type: "error"
type: "error",
});
} else {
setActive(false);
@ -110,7 +110,7 @@ export const ModalResetPassword = ({ active, setActive }) => {
showNotification({
show: true,
text: "Пароль изменён",
type: "success"
type: "success",
});
}
});
@ -133,12 +133,12 @@ export const ModalResetPassword = ({ active, setActive }) => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
email: e.target.value
email: e.target.value,
}));
setInputsError({
email: false,
password: false,
token: false
token: false,
});
}}
placeholder="E-mail"
@ -173,11 +173,11 @@ export const ModalResetPassword = ({ active, setActive }) => {
setInputsError({
email: false,
password: false,
token: false
token: false,
});
setInputsValue((prevValue) => ({
...prevValue,
token: e.target.value
token: e.target.value,
}));
}}
value={inputsValue.token}
@ -193,12 +193,12 @@ export const ModalResetPassword = ({ active, setActive }) => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
password: e.target.value
password: e.target.value,
}));
setInputsError({
email: false,
password: false,
token: false
token: false,
});
}}
placeholder="password"

View File

@ -15,7 +15,7 @@ import {
caseOfNum,
getCorrectRequestDate,
getToken,
urlForLocal
urlForLocal,
} from "@utils/helper";
import { apiRequest } from "@api/request";
@ -56,7 +56,7 @@ export const ModalTiсket = ({
projectName,
projectUsers,
projectOwnerId,
projectMarks
projectMarks,
}) => {
const dispatch = useDispatch();
const [addSubtask, setAddSubtask] = useState(false);
@ -64,7 +64,7 @@ export const ModalTiсket = ({
const [inputsValue, setInputsValue] = useState({
title: task.title,
description: task.description,
comment: ""
comment: "",
});
const [comments, setComments] = useState([]);
const [deadLine, setDeadLine] = useState(task.dead_line);
@ -85,7 +85,7 @@ export const ModalTiсket = ({
const [currentTimerCount, setCurrentTimerCount] = useState({
hours: 0,
minute: 0,
seconds: 0
seconds: 0,
});
const [timerId, setTimerId] = useState(null);
const [taskFiles, setTaskFiles] = useState([]);
@ -104,15 +104,15 @@ export const ModalTiсket = ({
method: "PUT",
data: {
task_id: task.id,
status: 0
}
status: 0,
},
}).then(() => {
setActive(false);
dispatch(setProjectBoardFetch(projectId));
showNotification({
show: true,
text: "Задача успешно была перемещена в архив",
type: "archive"
type: "archive",
});
});
}
@ -120,22 +120,22 @@ export const ModalTiсket = ({
const priority = {
2: "Высокий",
1: "Средний",
0: "Низкий"
0: "Низкий",
};
const priorityTypes = [
{
name: "Высокий",
key: 2
key: 2,
},
{
name: "Средний",
key: 1
key: 1,
},
{
name: "Низкий",
key: 0
}
key: 0,
},
];
function archiveTask() {
@ -147,7 +147,7 @@ export const ModalTiсket = ({
return showNotification({
show: true,
text: "Заполните поля",
type: "error"
type: "error",
});
}
apiRequest("/task/update-task", {
@ -155,15 +155,15 @@ export const ModalTiсket = ({
data: {
task_id: task.id,
title: inputsValue.title,
description: inputsValue.description
}
description: inputsValue.description,
},
}).then((res) => {
setEditOpen(!editOpen);
dispatch(setProjectBoardFetch(projectId));
showNotification({
show: true,
text: "Изменения сохранены",
type: "success"
type: "success",
});
});
}
@ -176,8 +176,8 @@ export const ModalTiсket = ({
data: {
text: inputsValue.comment,
entity_type: 2,
entity_id: task.id
}
entity_id: task.id,
},
}).then((res) => {
let newComment = res;
setCommentSendDisable(false);
@ -199,8 +199,8 @@ export const ModalTiсket = ({
method: "PUT",
data: {
comment_id: subComment.id,
status: 0
}
status: 0,
},
}).then(() => {});
});
}
@ -234,8 +234,8 @@ export const ModalTiсket = ({
data: {
entity_type: 2,
entity_id: task.id,
created_at: getCorrectRequestDate(new Date())
}
created_at: getCorrectRequestDate(new Date()),
},
}).then((res) => {
setTimerStart(true);
setTimerInfo(res);
@ -248,8 +248,8 @@ export const ModalTiсket = ({
method: "PUT",
data: {
timer_id: timerInfo.id,
stopped_at: getCorrectRequestDate(new Date())
}
stopped_at: getCorrectRequestDate(new Date()),
},
}).then(() => {
setTimerStart(false);
clearInterval(timerId);
@ -261,8 +261,8 @@ export const ModalTiсket = ({
method: "PUT",
data: {
task_id: task.id,
executor_id: person.user_id
}
executor_id: person.user_id,
},
}).then((res) => {
setExecutorId(person.user_id);
setDropListOpen(false);
@ -276,8 +276,8 @@ export const ModalTiсket = ({
method: "PUT",
data: {
task_id: task.id,
executor_id: 0
}
executor_id: 0,
},
}).then(() => {
setExecutorId(null);
setExecutor(null);
@ -291,8 +291,8 @@ export const ModalTiсket = ({
method: "PUT",
data: {
task_id: task.id,
execution_priority: key
}
execution_priority: key,
},
}).then(() => {
dispatch(setProjectBoardFetch(projectId));
});
@ -303,8 +303,8 @@ export const ModalTiсket = ({
method: "POST",
data: {
task_id: task.id,
user_id: person.user_id
}
user_id: person.user_id,
},
}).then((res) => {
setDropListMembersOpen(false);
setMembers((prevValue) => [...prevValue, res]);
@ -317,8 +317,8 @@ export const ModalTiсket = ({
method: "DELETE",
data: {
task_id: task.id,
user_id: person.user_id
}
user_id: person.user_id,
},
}).then(() => {
setMembers(members.filter((item) => item.user_id !== person.user_id));
dispatch(setProjectBoardFetch(projectId));
@ -351,7 +351,7 @@ export const ModalTiсket = ({
setCurrentTimerCount({
hours: Math.floor(timerSeconds / 60 / 60),
minute: Math.floor((timerSeconds / 60) % 60),
seconds: timerSeconds % 60
seconds: timerSeconds % 60,
});
updateTimerHours = Math.floor(timerSeconds / 60 / 60);
updateTimerMinute = Math.floor((timerSeconds / 60) % 60);
@ -386,10 +386,10 @@ export const ModalTiсket = ({
{
user: {
avatar: profileInfo.photo,
fio: profileInfo.fio
fio: profileInfo.fio,
},
user_id: profileInfo.id_user
}
user_id: profileInfo.id_user,
},
]);
}
}, []);
@ -410,7 +410,7 @@ export const ModalTiсket = ({
const res = await fetch("https://itguild.info/api/file/upload", {
method: "POST",
body: formData,
headers: { ...getToken() }
headers: { ...getToken() },
});
const data = await res.json();
@ -430,8 +430,8 @@ export const ModalTiсket = ({
file_id: id,
entity_type: 2,
entity_id: task.id,
status: 1
}
status: 1,
},
}).then((res) => {
setTaskFiles((prevValue) => [...prevValue, res]);
// setUploadedFile(null);
@ -470,7 +470,7 @@ export const ModalTiсket = ({
return setCurrentTimerCount({
hours: updateTimerHours,
minute: updateTimerMinute,
seconds: updateTimerSec
seconds: updateTimerSec,
});
}
@ -496,7 +496,7 @@ export const ModalTiсket = ({
showNotification({
show: true,
text: "Ссылка скопирована в буфер обмена",
type: "copy"
type: "copy",
});
}
@ -505,8 +505,8 @@ export const ModalTiсket = ({
method: "PUT",
data: {
task_id: task.id,
dead_line: getCorrectRequestDate(date)
}
dead_line: getCorrectRequestDate(date),
},
}).then(() => {
dispatch(setProjectBoardFetch(projectId));
});
@ -518,8 +518,8 @@ export const ModalTiсket = ({
data: {
mark_id: tagId,
entity_type: 2,
entity_id: task.id
}
entity_id: task.id,
},
}).then((data) => {
setSelectTagsOpen(false);
setTaskTags((prevValue) => [...prevValue, data.mark]);
@ -533,8 +533,8 @@ export const ModalTiсket = ({
data: {
mark_id: tagId,
entity_type: 2,
entity_id: task.id
}
entity_id: task.id,
},
}).then(() => {
setTaskTags((prevValue) => prevValue.filter((tag) => tag.id !== tagId));
dispatch(setProjectBoardFetch(projectId));
@ -617,7 +617,7 @@ export const ModalTiсket = ({
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
title: e.target.value
title: e.target.value,
}));
}}
/>
@ -640,14 +640,14 @@ export const ModalTiсket = ({
"ImageToolbar",
"ImageUpload",
"MediaEmbed",
"BlockQuote"
]
"BlockQuote",
],
}}
onChange={(event, editor) => {
const data = editor.getData();
setInputsValue((prevValue) => ({
...prevValue,
description: data
description: data,
}));
}}
/>
@ -729,7 +729,7 @@ export const ModalTiсket = ({
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
comment: e.target.value
comment: e.target.value,
}));
}}
/>

View File

@ -12,7 +12,7 @@ import {
getBoarderLoader,
modalToggle,
setProjectBoardFetch,
setToggleTab
setToggleTab,
} from "@redux/projectsTrackerSlice";
import {
@ -20,7 +20,7 @@ import {
caseOfNum,
getCorrectRequestDate,
getToken,
urlForLocal
urlForLocal,
} from "@utils/helper";
import { apiRequest } from "@api/request";
@ -77,7 +77,7 @@ export const TicketFullScreen = () => {
const [currentTimerCount, setCurrentTimerCount] = useState({
hours: 0,
minute: 0,
seconds: 0
seconds: 0,
});
const profileInfo = useSelector(getProfileInfo);
const [timerId, setTimerId] = useState(null);
@ -102,22 +102,22 @@ export const TicketFullScreen = () => {
const priority = {
2: "Высокий",
1: "Средний",
0: "Низкий"
0: "Низкий",
};
const priorityTypes = [
{
name: "Высокий",
key: 2
key: 2,
},
{
name: "Средний",
key: 1
key: 1,
},
{
name: "Низкий",
key: 0
}
key: 0,
},
];
useEffect(() => {
@ -133,7 +133,7 @@ export const TicketFullScreen = () => {
setInputsValue({
title: taskInfo.title,
description: taskInfo.description,
comment: ""
comment: "",
});
setTaskTags(taskInfo.mark);
apiRequest(
@ -168,7 +168,7 @@ export const TicketFullScreen = () => {
setCurrentTimerCount({
hours: Math.floor(timerSeconds / 60 / 60),
minute: Math.floor((timerSeconds / 60) % 60),
seconds: timerSeconds % 60
seconds: timerSeconds % 60,
});
updateTimerHours = Math.floor(timerSeconds / 60 / 60);
updateTimerMinute = Math.floor((timerSeconds / 60) % 60);
@ -208,8 +208,8 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
task_id: ticketId.id,
status: 0
}
status: 0,
},
}).then(() => {
navigate(`/tracker/project/${taskInfo.project_id}`);
});
@ -224,7 +224,7 @@ export const TicketFullScreen = () => {
return showNotification({
show: true,
text: "Заполните поля",
type: "error"
type: "error",
});
}
apiRequest("/task/update-task", {
@ -232,13 +232,13 @@ export const TicketFullScreen = () => {
data: {
task_id: taskInfo.id,
title: inputsValue.title,
description: inputsValue.description
}
description: inputsValue.description,
},
}).then(() => {
showNotification({
show: true,
text: "Изменения сохранены",
type: "success"
type: "success",
});
setEditOpen(!editOpen);
});
@ -252,8 +252,8 @@ export const TicketFullScreen = () => {
data: {
text: inputsValue.comment,
entity_type: 2,
entity_id: taskInfo.id
}
entity_id: taskInfo.id,
},
}).then((res) => {
let newComment = res;
setCommentSendDisable(false);
@ -270,8 +270,8 @@ export const TicketFullScreen = () => {
data: {
entity_type: 2,
entity_id: taskInfo.id,
created_at: getCorrectRequestDate(new Date())
}
created_at: getCorrectRequestDate(new Date()),
},
}).then((res) => {
setTimerStart(true);
setTimerInfo(res);
@ -284,8 +284,8 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
timer_id: timerInfo.id,
stopped_at: getCorrectRequestDate(new Date())
}
stopped_at: getCorrectRequestDate(new Date()),
},
}).then(() => {
setTimerStart(false);
clearInterval(timerId);
@ -297,8 +297,8 @@ export const TicketFullScreen = () => {
method: "DELETE",
data: {
project_id: projectInfo.id,
user_id: userId
}
user_id: userId,
},
}).then(() => {
dispatch(deletePersonOnProject(userId));
});
@ -314,8 +314,8 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
comment_id: subComment.id,
status: 0
}
status: 0,
},
}).then(() => {});
});
}
@ -391,7 +391,7 @@ export const TicketFullScreen = () => {
return setCurrentTimerCount({
hours: updateTimerHours,
minute: updateTimerMinute,
seconds: updateTimerSec
seconds: updateTimerSec,
});
}
@ -405,13 +405,13 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
task_id: taskInfo.id,
executor_id: 0
}
executor_id: 0,
},
}).then(() => {
setTaskInfo((prevState) => ({
...prevState,
executor_id: null,
executor: null
executor: null,
}));
});
}
@ -421,14 +421,14 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
task_id: taskInfo.id,
executor_id: person.user_id
}
executor_id: person.user_id,
},
}).then((res) => {
setDropListOpen(false);
setTaskInfo((prevState) => ({
...prevState,
executor_id: res.executor_id,
executor: res.executor
executor: res.executor,
}));
});
}
@ -438,14 +438,14 @@ export const TicketFullScreen = () => {
method: "DELETE",
data: {
task_id: taskInfo.id,
user_id: person.user_id
}
user_id: person.user_id,
},
}).then(() => {
setTaskInfo((prevState) => ({
...prevState,
taskUsers: taskInfo.taskUsers.filter(
(item) => item.user_id !== person.user_id
)
),
}));
});
}
@ -455,13 +455,13 @@ export const TicketFullScreen = () => {
method: "POST",
data: {
task_id: taskInfo.id,
user_id: person.user_id
}
user_id: person.user_id,
},
}).then((res) => {
setDropListMembersOpen(false);
setTaskInfo((prevValue) => ({
...prevValue,
taskUsers: [...prevValue.taskUsers, res]
taskUsers: [...prevValue.taskUsers, res],
}));
});
}
@ -471,8 +471,8 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
task_id: taskInfo.id,
dead_line: getCorrectRequestDate(date)
}
dead_line: getCorrectRequestDate(date),
},
}).then(() => {});
}
@ -482,7 +482,7 @@ export const TicketFullScreen = () => {
const res = await fetch("https://itguild.info/api/file/upload", {
method: "POST",
body: formData,
headers: { ...getToken() }
headers: { ...getToken() },
});
const data = await res.json();
@ -497,8 +497,8 @@ export const TicketFullScreen = () => {
file_id: uploadedFile[0].id,
entity_type: 2,
entity_id: taskInfo.id,
status: 1
}
status: 1,
},
}).then((res) => {
setTaskFiles((prevValue) => [...prevValue, res]);
setUploadedFile(null);
@ -515,8 +515,8 @@ export const TicketFullScreen = () => {
method: "PUT",
data: {
task_id: taskInfo.id,
execution_priority: key
}
execution_priority: key,
},
}).then(() => {});
}
@ -552,8 +552,8 @@ export const TicketFullScreen = () => {
data: {
mark_id: tagId,
entity_type: 2,
entity_id: taskInfo.id
}
entity_id: taskInfo.id,
},
}).then(() => {
setTaskTags((prevValue) => prevValue.filter((tag) => tag.id !== tagId));
});
@ -565,8 +565,8 @@ export const TicketFullScreen = () => {
data: {
mark_id: tagId,
entity_type: 2,
entity_id: taskInfo.id
}
entity_id: taskInfo.id,
},
}).then((data) => {
setSelectTagsOpen(false);
setTaskTags((prevValue) => [...prevValue, data.mark]);
@ -639,7 +639,7 @@ export const TicketFullScreen = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Трекер", link: "/profile/tracker" }
{ name: "Трекер", link: "/profile/tracker" },
]}
/>
<h2 className="tracker__title">Управление проектами с трекером</h2>
@ -794,7 +794,7 @@ export const TicketFullScreen = () => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
title: e.target.value
title: e.target.value,
}));
}}
/>
@ -819,14 +819,14 @@ export const TicketFullScreen = () => {
"ImageToolbar",
"ImageUpload",
"MediaEmbed",
"BlockQuote"
]
"BlockQuote",
],
}}
onChange={(event, editor) => {
const data = editor.getData();
setInputsValue((prevValue) => ({
...prevValue,
description: data
description: data,
}));
}}
/>
@ -834,7 +834,7 @@ export const TicketFullScreen = () => {
<p
className="fullDescription fullScreenDescription"
dangerouslySetInnerHTML={{
__html: inputsValue.description
__html: inputsValue.description,
}}
/>
)}
@ -917,7 +917,7 @@ export const TicketFullScreen = () => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
comment: e.target.value
comment: e.target.value,
}));
}}
/>

View File

@ -19,7 +19,7 @@ import {
setColumnName,
setColumnPriority,
setProject,
setProjectBoardFetch
setProjectBoardFetch,
} from "@redux/projectsTrackerSlice";
import { getCorrectRequestDate, urlForLocal } from "@utils/helper";
@ -52,7 +52,7 @@ export const TrackerModal = ({
projectId,
priorityTask,
projectUsers,
projectMarks
projectMarks,
}) => {
const dispatch = useDispatch();
const projectBoard = useSelector(getProjectBoard);
@ -93,16 +93,16 @@ export const TrackerModal = ({
const priority = [
{
name: "Высокий",
key: 2
key: 2,
},
{
name: "Средний",
key: 1
key: 1,
},
{
name: "Низкий",
key: 0
}
key: 0,
},
];
function createTab() {
@ -118,8 +118,8 @@ export const TrackerModal = ({
priority: projectBoard.columns.length
? projectBoard.columns.at(-1).priority + 1
: 1,
title: valueColumn
}
title: valueColumn,
},
}).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id));
});
@ -132,7 +132,7 @@ export const TrackerModal = ({
showNotification({
show: true,
text: "Введите название и описание",
type: "error"
type: "error",
});
return;
}
@ -148,14 +148,14 @@ export const TrackerModal = ({
column_id: selectedTab,
execution_priority: selectedPriority ? selectedPriority.key : "",
priority: priorityTask,
dead_line: deadLineDate ? getCorrectRequestDate(deadLineDate) : ""
}
dead_line: deadLineDate ? getCorrectRequestDate(deadLineDate) : "",
},
}).then((res) => {
if (res.status === 500) {
showNotification({
show: true,
text: "Задача с таким именем уже существует",
type: "error"
type: "error",
});
} else {
for (let i = 0; i < taskTags.length; i++) {
@ -164,8 +164,8 @@ export const TrackerModal = ({
data: {
mark_id: taskTags[i].id,
entity_type: 2,
entity_id: res.id
}
entity_id: res.id,
},
}).then(() => {
setTaskTags([]);
});
@ -175,8 +175,8 @@ export const TrackerModal = ({
method: "PUT",
data: {
task_id: res.id,
executor_id: selectedExecutorTask.user_id
}
executor_id: selectedExecutorTask.user_id,
},
}).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id));
setActive(false);
@ -195,7 +195,7 @@ export const TrackerModal = ({
showNotification({
show: true,
text: "Задача создана",
type: "success"
type: "success",
});
}
});
@ -206,8 +206,8 @@ export const TrackerModal = ({
method: "PUT",
data: {
project_id: projectId,
name: projectName
}
name: projectName,
},
}).then(() => {
setActive(false);
dispatch(editProjectName({ id: projectId, name: projectName }));
@ -220,20 +220,20 @@ export const TrackerModal = ({
const priorityColumns = [
{
column_id: column.id,
priority: Number(columnPriority)
}
priority: Number(columnPriority),
},
];
for (let i = column.priority; i < columnPriority; i++) {
const currentColumn = {
column_id: projectBoard.columns[i].id,
priority: i
priority: i,
};
priorityColumns.push(currentColumn);
}
for (let i = column.priority; i > columnPriority; i--) {
const currentColumn = {
column_id: projectBoard.columns[i - 2].id,
priority: i
priority: i,
};
priorityColumns.push(currentColumn);
}
@ -241,8 +241,8 @@ export const TrackerModal = ({
method: "POST",
data: {
project_id: projectBoard.id,
data: JSON.stringify(priorityColumns)
}
data: JSON.stringify(priorityColumns),
},
}).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id));
});
@ -256,8 +256,8 @@ export const TrackerModal = ({
method: "PUT",
data: {
column_id: columnId,
title: columnName
}
title: columnName,
},
}).then(() => {
setActive(false);
dispatch(editColumnName({ id: columnId, title: columnName }));
@ -273,8 +273,8 @@ export const TrackerModal = ({
data: {
user_id: localStorage.getItem("id"),
name: nameProject,
status: 19
}
status: 19,
},
}).then((res) => {
if (!Array.isArray(res.name)) {
const result = { ...res, columns: [] };
@ -285,7 +285,7 @@ export const TrackerModal = ({
showNotification({
show: true,
text: "Проект с таким именем уже существует",
type: "error"
type: "error",
});
}
});
@ -297,8 +297,8 @@ export const TrackerModal = ({
method: "POST",
data: {
user_id: selectedWorker.user_id,
project_id: projectBoard.id
}
project_id: projectBoard.id,
},
}).then((el) => {
dispatch(addPersonToProject(el));
setActive(false);
@ -332,10 +332,10 @@ export const TrackerModal = ({
{
user: {
avatar: profileInfo.photo,
fio: profileInfo.fio
fio: profileInfo.fio,
},
user_id: profileInfo.id_user
}
user_id: profileInfo.id_user,
},
]);
} else {
setCorrectProjectUsers(projectUsers);
@ -525,10 +525,10 @@ export const TrackerModal = ({
"italic",
"link",
"bulletedList",
"numberedList"
"numberedList",
],
removePlugins: ["BlockQuote"],
placeholder: "Описание задачи"
placeholder: "Описание задачи",
}}
onChange={(event, editor) => {
const data = editor.getData();

View File

@ -22,55 +22,55 @@ export const Navigation = () => {
developer: [
{
path: "/summary",
name: "Резюме"
name: "Резюме",
},
{
path: "/calendar",
name: "Отчеты"
name: "Отчеты",
},
{
path: "/tracker",
name: "Трекер"
name: "Трекер",
},
{
path: "/payouts",
name: "Выплаты"
name: "Выплаты",
},
{
path: "/quiz",
name: "Тесты"
name: "Тесты",
},
{
path: "/settings",
name: "Настройки"
}
name: "Настройки",
},
],
partner: [
{
path: "/catalog",
name: "Каталог"
name: "Каталог",
},
{
path: "/requests",
name: "Запросы"
name: "Запросы",
},
{
path: "/categories",
name: "Персонал"
name: "Персонал",
},
{
path: "/tracker",
name: "Трекер"
name: "Трекер",
},
{
path: "/treaties",
name: "Договора"
name: "Договора",
},
{
path: "/settings",
name: "Настройки"
}
]
name: "Настройки",
},
],
});
useEffect(() => {

View File

@ -15,7 +15,7 @@ const images = {
archive: archive,
error: error,
copy: copy,
success: success
success: success,
};
export const Notification = () => {

View File

@ -4,7 +4,7 @@ import { useDispatch, useSelector } from "react-redux";
import {
getPositionId,
selectTags,
setPositionId
setPositionId,
} from "@redux/outstaffingSlice";
import OutstaffingBlock from "@components/OutstaffingBlock/OutstaffingBlock";
@ -34,7 +34,7 @@ const Outstaffing = () => {
const onSelectPosition = createSelectPositionHandler({
positionId,
setPositionId,
dispatch
dispatch,
});
return (
<>

View File

@ -13,13 +13,13 @@ const handlePositionClick = ({
positionId,
isSelected,
onSelect,
apiRequest
apiRequest,
}) => {
if (isSelected) {
apiRequest("/profile", {
params: {
limit: 1000
}
limit: 1000,
},
}).then((profileArr) => {
dispatch(profiles(profileArr));
dispatch(selectedItems([]));
@ -29,8 +29,8 @@ const handlePositionClick = ({
apiRequest("/profile", {
params: {
limit: "1000",
position_id: positionId
}
position_id: positionId,
},
}).then((res) => {
dispatch(profiles(res));
dispatch(selectedItems([]));
@ -46,7 +46,7 @@ const OutstaffingBlock = ({
header,
positionId,
isSelected,
onSelect
onSelect,
}) => {
const dispatch = useDispatch();
@ -87,7 +87,7 @@ const OutstaffingBlock = ({
positionId,
isSelected,
onSelect,
apiRequest
apiRequest,
})
}
>

View File

@ -8,7 +8,7 @@ import { getProfileInfo } from "@redux/outstaffingSlice";
import {
getRequestDates,
setReportDate,
setRequestDate
setRequestDate,
} from "@redux/reportSlice";
import { urlForLocal } from "@utils/helper";
@ -89,7 +89,7 @@ export const ProfileCalendar = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Отчеты", link: "/profile/calendar" }
{ name: "Отчеты", link: "/profile/calendar" },
]}
/>
<h2 className="summary__title">Ваши отчеты</h2>

View File

@ -7,7 +7,7 @@ import { Link } from "react-router-dom";
import {
setReportDate,
setRequestDate,
setSendRequest
setSendRequest,
} from "@redux/reportSlice";
import { getCorrectYYMMDD } from "@utils/helper";
@ -20,7 +20,7 @@ import {
currentMonthAndDay,
getCorrectDate,
getReports,
hourOfNum
hourOfNum,
} from "@components/Calendar/calendarHelper";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import ShortReport from "@components/ShortReport/ShortReport";
@ -40,7 +40,7 @@ export const ProfileCalendarComponent = React.memo(
startRangeDays,
toggleRangeDays,
startDate,
setStartDateRange
setStartDateRange,
}) => {
const dispatch = useDispatch();
@ -58,7 +58,7 @@ export const ProfileCalendarComponent = React.memo(
calendarHelper(value).map((array) => {
setSelectedRangeDays((prevState) => ({
...prevState,
[array[0]]: false
[array[0]]: false,
}));
});
if (endDate) {
@ -196,7 +196,7 @@ export const ProfileCalendarComponent = React.memo(
calendarHelper(value).map((array) => {
setSelectedRangeDays((prevState) => ({
...prevState,
[array[0]]: false
[array[0]]: false,
}));
});
}
@ -316,15 +316,15 @@ export const ProfileCalendarComponent = React.memo(
? `${getCorrectDate(startDate)} - ${getCorrectDate(endDate)}`
: `${getCorrectDate(endDate)} - ${getCorrectDate(startDate)}`
: activePeriod
? "Выберите диапазон на календаре"
: "Выбрать диапазон"}
? "Выберите диапазон на календаре"
: "Выбрать диапазон"}
</span>
<span>
{totalRangeHours
? `${totalRangeHours} ${hourOfNum(totalRangeHours)}`
: endDate
? "0 часов"
: ""}
? "0 часов"
: ""}
</span>
{endDate && (
<BaseButton

View File

@ -58,14 +58,14 @@ export const ProjectTiket = ({ project, index }) => {
method: "PUT",
data: {
project_id: project.id,
status: 10
}
status: 10,
},
}).then(() => {
dispatch(deleteProject(project));
showNotification({
show: true,
text: "Проект успешно была перемещена в архив",
type: "archive"
type: "archive",
});
});
}

View File

@ -23,7 +23,7 @@ import remove from "assets/icons/remove.svg";
import {
getCorrectDate,
getCreatedDate,
hourOfNum
hourOfNum,
} from "../Calendar/calendarHelper";
import "./reportForm.scss";
@ -48,7 +48,7 @@ const ReportForm = () => {
const [datePickerOpen, setDatePickerOpen] = useState(false);
const [inputs, setInputs] = useState([
{ task: "", hours_spent: "", minutes_spent: 0 }
{ task: "", hours_spent: "", minutes_spent: 0 },
]);
const [troublesInputValue, setTroublesInputValue] = useState("");
const [scheduledInputValue, setScheduledInputValue] = useState("");
@ -56,7 +56,7 @@ const ReportForm = () => {
const addInput = () => {
setInputs((prev) => [
...prev,
{ task: "", hours_spent: "", minutes_spent: 0 }
{ task: "", hours_spent: "", minutes_spent: 0 },
]);
};
@ -101,8 +101,8 @@ const ReportForm = () => {
difficulties: troublesInputValue,
tomorrow: scheduledInputValue,
created_at: getCreatedDate(startDate),
status: 1
}
status: 1,
},
}).then(() => {
setReportSuccess("Отчет отправлен");
setTimeout(() => {
@ -126,7 +126,7 @@ const ReportForm = () => {
links={[
{ name: "Главная", link: "/profile" },
{ name: "Отчеты", link: "/profile/calendar" },
{ name: "Добавить отчет", link: "/report" }
{ name: "Добавить отчет", link: "/report" },
]}
/>
<h2 className="summary__title">
@ -207,7 +207,7 @@ const ReportForm = () => {
return index === inputIndex
? {
...input,
task: e.target.value
task: e.target.value,
}
: input;
})
@ -233,7 +233,7 @@ const ReportForm = () => {
return index === inputIndex
? {
...input,
hours_spent: Number(e.target.value)
hours_spent: Number(e.target.value),
}
: input;
})

View File

@ -7,7 +7,7 @@ import {
selectItems,
selectTags,
selectedItems,
setPositionId
setPositionId,
} from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
@ -31,7 +31,7 @@ const TagSelect = () => {
const params = filterItemsId ? { skill: filterItemsId } : "";
apiRequest("/profile", {
params: { ...params, limit: 1000 }
params: { ...params, limit: 1000 },
}).then((res) => {
dispatch(profiles(res));
setSearchLoading(false);
@ -58,7 +58,7 @@ const TagSelect = () => {
return {
id: item.id,
value: item.value,
label: item.value
label: item.value,
};
})
}

View File

@ -5,7 +5,7 @@ import { Link } from "react-router-dom";
import {
getReportDate,
getSendRequest,
setSendRequest
setSendRequest,
} from "@redux/reportSlice";
import { apiRequest } from "@api/request";
@ -13,7 +13,7 @@ import { apiRequest } from "@api/request";
import {
getCorrectDate,
getCreatedDate,
hourOfNum
hourOfNum,
} from "@components/Calendar/calendarHelper";
import { Loader } from "@components/Common/Loader/Loader";
@ -56,7 +56,7 @@ export const ShortReport = () => {
const taskInfo = {
hours: task.hours_spent,
task: task.task,
id: task.id
id: task.id,
};
if (task.hours_spent) {
spendTime += Number(task.hours_spent);

View File

@ -18,24 +18,24 @@ export const SliderWorkers = ({ title, titleInfo, subTitle }) => {
const [workers] = useState([
{
avatar: mockWorker,
skils: "React / Vue Front end, Middle разработчик"
skils: "React / Vue Front end, Middle разработчик",
},
{
avatar: avatarMockFirst,
skils: "Vue / React Front end, Senior разработчик"
skils: "Vue / React Front end, Senior разработчик",
},
{
avatar: avatarMockSecond,
skils: "NodeJs Fullstack, Middle разработчик"
skils: "NodeJs Fullstack, Middle разработчик",
},
{
avatar: avatarMockThird,
skils: "React / Vue Front end, Middle разработчик"
skils: "React / Vue Front end, Middle разработчик",
},
{
avatar: avatarMockFourth,
skils: "React / PHP Fullstack, Middle разработчик"
}
skils: "React / PHP Fullstack, Middle разработчик",
},
]);
const settings = {
@ -44,7 +44,7 @@ export const SliderWorkers = ({ title, titleInfo, subTitle }) => {
slidesToShow: 3,
slidesToScroll: 1,
autoplay: true,
autoplaySpeed: 4500
autoplaySpeed: 4500,
};
if (window.innerWidth < 575) {

View File

@ -6,7 +6,7 @@ const StarRating = ({
countStars = 1,
countActiveStars = 1,
color = "#52B709",
size = 61
size = 61,
}) => {
const [shadedStars, setShadedStars] = useState([]);
const [noShadedStars, setNoShadedStars] = useState([]);
@ -22,16 +22,16 @@ const StarRating = ({
}, []);
const ratingStyle = {
"--size": size + "px"
"--size": size + "px",
};
const activeStyle = {
"--width": percent + "%",
"--color": color,
"--content": shadedStars.join("")
"--content": shadedStars.join(""),
};
const bodyStyle = {
"--content": noShadedStars.join(""),
"--color": color
"--color": color,
};
return (

View File

@ -27,7 +27,7 @@ export const TrackerSelectColumn = ({ columns, task, currentColumn }) => {
dispatch(
moveProjectTask({
startWrapperIndex: { index: currentColumn.id, task },
columnId: column.id
columnId: column.id,
})
);
}}

View File

@ -19,7 +19,7 @@ export const TrackerTaskComment = ({
comment,
commentDelete,
addSubComment,
subCommentDelete
subCommentDelete,
}) => {
const [commentsEditOpen, setCommentsEditOpen] = useState(false);
const [commentsEditText, setCommentsEditText] = useState(comment.text);
@ -32,8 +32,8 @@ export const TrackerTaskComment = ({
method: "PUT",
data: {
comment_id: comment.id,
text: commentsEditText
}
text: commentsEditText,
},
}).then(() => {});
}
@ -42,8 +42,8 @@ export const TrackerTaskComment = ({
method: "PUT",
data: {
comment_id: comment.id,
status: 0
}
status: 0,
},
}).then(() => {
if (comment.parent_id) {
subCommentDelete(comment);
@ -62,8 +62,8 @@ export const TrackerTaskComment = ({
text: subCommentsCreateText,
entity_type: 2,
entity_id: taskId,
parent_id: comment.id
}
parent_id: comment.id,
},
}).then((res) => {
let newSubComment = res;
newSubComment.created_at = new Date();
@ -80,7 +80,7 @@ export const TrackerTaskComment = ({
: "",
"comments__list__item",
commentsEditOpen ? "comment__edit--open" : "",
comment.parent_id ? "comments__list__item__subComment" : ""
comment.parent_id ? "comments__list__item__subComment" : "",
].join(" ")}
>
<div className="comments__list__item__info">
@ -131,8 +131,8 @@ export const TrackerTaskComment = ({
"ImageToolbar",
"ImageUpload",
"MediaEmbed",
"BlockQuote"
]
"BlockQuote",
],
}}
onChange={(event, editor) => {
const data = editor.getData();

View File

@ -16,7 +16,7 @@ export const Instruction = () => {
useEffect(() => {
apiRequest("/user-questionnaire/get-question-number", {
params: { user_questionnaire_uuid: test.uuid }
params: { user_questionnaire_uuid: test.uuid },
}).then((res) => setCountQuestions(res.question_number));
}, []);

View File

@ -28,7 +28,7 @@ export const QuizPassingInformation = ({ setStartTest, uuid, timer }) => {
showNotification({
show: true,
text: res?.message || "",
type: "error"
type: "error",
});
return;
}
@ -54,7 +54,7 @@ export const QuizPassingInformation = ({ setStartTest, uuid, timer }) => {
const completeTest = () =>
apiRequest("/user-questionnaire/questionnaire-completed", {
method: "POST"
method: "POST",
});
const finishQuiz = async () => {

View File

@ -29,7 +29,7 @@ export const TaskQuiz = ({ timer }) => {
const { userResponses, handleChange } = useHandlerFieldTest({
questions,
indexQuestion: index
indexQuestion: index,
});
const nextQuestion = async (e) => {
@ -50,13 +50,13 @@ export const TaskQuiz = ({ timer }) => {
data: {
user_id: userId,
user_questionnaire_uuid: uuid,
userResponses: JSON.stringify(userResponses)
}
userResponses: JSON.stringify(userResponses),
},
}).then(() => {
showNotification({
show: true,
text: "Тест успешно пройден",
type: "success"
type: "success",
});
navigate("/quiz");
// if (String(res?.status)[0] !== "2") {

View File

@ -2,7 +2,7 @@ import React, { Component } from "react";
class ErrorBoundary extends Component {
state = {
error: null
error: null,
};
static getDerivedStateFromError(error) {

View File

@ -10,8 +10,8 @@ export const useHandlerFieldTest = ({ questions, indexQuestion }) => {
{
question_id: questions[indexQuestion].id,
response_body: e.target.value,
answer_id: e.target.id ? e.target.id : questions[indexQuestion].id
}
answer_id: e.target.id ? e.target.id : questions[indexQuestion].id,
},
]);
};

View File

@ -22,18 +22,18 @@ export const Article = () => {
{
image: cardImg1,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg2,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg3,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
}
data: "1 марта, 2023",
},
]);
return (
@ -48,8 +48,8 @@ export const Article = () => {
{ name: "Блог", link: "/blog" },
{
name: "Аутстаффинг джунов: почему это выгодно",
link: "/blog"
}
link: "/blog",
},
]}
/>
</div>

View File

@ -44,7 +44,7 @@ export const AuthForCandidate = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: BackEndImg
img: BackEndImg,
},
{
title: "Frontend разработчики",
@ -52,14 +52,14 @@ export const AuthForCandidate = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: FrontendImg
img: FrontendImg,
},
{
title: "Архитектура проектов",
link: "/registration-candidate",
description: "Потоки данных ER ERP CRM CQRS UML BPMN",
available: true,
img: ArchitectureImg
img: ArchitectureImg,
},
{
title: "Дизайн проектов",
@ -67,35 +67,35 @@ export const AuthForCandidate = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: DesignImg
img: DesignImg,
},
{
title: "Тестирование проектов",
link: "/registration-candidate",
description: "SQL Postman TestRail Kibana Ручное тестирование",
available: false,
img: TestImg
img: TestImg,
},
{
title: "Администрирование проектов",
link: "/registration-candidate",
description: "DevOps ELK Kubernetes Docker Bash Apache Oracle Git",
available: false,
img: AdminImg
img: AdminImg,
},
{
title: "Управление проектом",
link: "/registration-candidate",
description: "Scrum Kanban Agile Miro CustDev",
available: false,
img: ManageImg
img: ManageImg,
},
{
title: "Копирайтинг проектов",
link: "/registration-candidate",
description: "Теги Заголовок H1 Дескриптор Абзац Сценарий",
available: false,
img: CopyImg
img: CopyImg,
},
{
title: "Реклама и SMM",
@ -103,8 +103,8 @@ export const AuthForCandidate = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: false,
img: SmmImg
}
img: SmmImg,
},
]);
useEffect(() => {

View File

@ -21,33 +21,33 @@ export const Blog = () => {
{
image: cardImg1,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg2,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg3,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg4,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg5,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
data: "1 марта, 2023",
},
{
image: cardImg6,
title: "Аутстаффинг джунов: почему это выгодно",
data: "1 марта, 2023"
}
data: "1 марта, 2023",
},
]);
return (
@ -60,7 +60,7 @@ export const Blog = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/auth" },
{ name: "Блог", link: "/blog" }
{ name: "Блог", link: "/blog" },
]}
/>
</div>

View File

@ -5,7 +5,7 @@ import { Navigate, useNavigate, useParams } from "react-router-dom";
import {
currentCandidate,
selectCurrentCandidate
selectCurrentCandidate,
} from "@redux/outstaffingSlice";
import { LEVELS, SKILLS } from "@utils/constants";
@ -39,7 +39,7 @@ const FormPage = () => {
useEffect(() => {
if (!candidate.id) {
apiRequest("/profile", {
params: Number(params.id)
params: Number(params.id),
}).then((el) => dispatch(currentCandidate(el)));
}
}, []);

View File

@ -17,7 +17,7 @@ export const FrequentlyAskedQuestion = () => {
id: params.id,
title: "Это фриланс-платформа?",
answer:
"Нет, мы работаем только с юридическими лицами и индивидуальными предпринимателями и тщательно проверяем своих партнеров. Партнерами являются агентства, которые специализируются на оказании услуг в формате аутстафф-модели и обладают глубокой экспертизой в разработке и внедрении IT-проектов."
"Нет, мы работаем только с юридическими лицами и индивидуальными предпринимателями и тщательно проверяем своих партнеров. Партнерами являются агентства, которые специализируются на оказании услуг в формате аутстафф-модели и обладают глубокой экспертизой в разработке и внедрении IT-проектов.",
});
useEffect(() => {
@ -34,12 +34,12 @@ export const FrequentlyAskedQuestion = () => {
{ name: "Главная", link: "/auth" },
{
name: "FAQ (часто задаваемые вопросы)",
link: "/frequently-asked-questions"
link: "/frequently-asked-questions",
},
{
name: question.title,
link: `/frequently-asked-question/${params.id}`
}
link: `/frequently-asked-question/${params.id}`,
},
]}
/>
<div className="frequently-asked-question__title">{question.title}</div>

View File

@ -17,55 +17,55 @@ export const FrequentlyAskedQuestions = () => {
questions: [
{
id: 1,
title: "Это фриланс-платформа?"
title: "Это фриланс-платформа?",
},
{
id: 2,
title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?"
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
},
{
id: 3,
title: "Это фриланс-платформа?"
title: "Это фриланс-платформа?",
},
{
id: 4,
title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?"
}
]
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
},
],
},
{
title: "Поиск специалиста",
questions: [
{
id: 11,
title: "Это фриланс-платформа?"
title: "Это фриланс-платформа?",
},
{
id: 22,
title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?"
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
},
{
id: 33,
title: "Это фриланс-платформа?"
title: "Это фриланс-платформа?",
},
{
id: 44,
title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?"
}
]
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
},
],
},
{
title: "Бронирование специалиста",
questions: [
{
id: 11,
title: "Это фриланс-платформа?"
}
]
title: "Это фриланс-платформа?",
},
],
},
{
title: "Работа с выбранным специалистом",
@ -73,10 +73,10 @@ export const FrequentlyAskedQuestions = () => {
{
id: 11,
title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?"
}
]
}
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
},
],
},
];
return (
@ -90,8 +90,8 @@ export const FrequentlyAskedQuestions = () => {
{ name: "Главная", link: "/auth" },
{
name: "FAQ (часто задаваемые вопросы)",
link: "/frequently-asked-questions"
}
link: "/frequently-asked-questions",
},
]}
/>
<div className="frequently-asked-questions__about">

View File

@ -26,7 +26,7 @@ const Home = () => {
useEffect(() => {
setIsLoadingMore(true);
apiRequest("/profile", {
params: { limit: 1000 }
params: { limit: 1000 },
}).then((profileArr) => {
dispatch(profiles(profileArr));
setIsLoadingMore(false);
@ -63,7 +63,7 @@ const Home = () => {
links={[
{ name: "Главная", link: "/profile" },
{ name: "Запросы и открытые позиции", link: "/profile/requests" },
{ name: "Каталог", link: "/profile/catalog" }
{ name: "Каталог", link: "/profile/catalog" },
]}
/>
<h2 className="catalog__title">Каталог специалистов</h2>

View File

@ -73,12 +73,12 @@ export const PartnerAddRequest = () => {
) {
setInputs({
title: partnerRequestInfo.title,
description: partnerRequestInfo.descr
description: partnerRequestInfo.descr,
});
setSelectedSpecialization(partnerRequestInfo.position);
setSelectedLevel({
name: partnerRequestInfo.level,
id: partnerRequestInfo.knowledge_level_id
id: partnerRequestInfo.knowledge_level_id,
});
setSelectedCount(partnerRequestInfo.specialist_count);
setSelectedSkills(partnerRequestInfo.skills);
@ -115,8 +115,8 @@ export const PartnerAddRequest = () => {
descr: inputs.description,
skill_ids: selectedSkills.map((skill) => {
return skill.id;
})
}
}),
},
}).then(() => {
navigate("/profile/requests");
});
@ -133,8 +133,8 @@ export const PartnerAddRequest = () => {
descr: inputs.description,
skill_ids: selectedSkills.map((skill) => {
return skill.id;
})
}
}),
},
}).then(() => {
navigate("/profile/requests");
});
@ -154,8 +154,8 @@ export const PartnerAddRequest = () => {
name: `${
editRequest ? "Редактирование заявки" : "Создание новой заявки"
}`,
link: "/profile/add-request"
}
link: "/profile/add-request",
},
]}
/>
<h2 className="partnerAddRequest__title">
@ -175,7 +175,7 @@ export const PartnerAddRequest = () => {
onChange={(e) =>
setInputs((prevValue) => ({
...prevValue,
title: e.target.value
title: e.target.value,
}))
}
type="text"
@ -242,7 +242,7 @@ export const PartnerAddRequest = () => {
setSkills((prevArray) => [...prevArray, skill]);
setFilteredSkills((prevArray) => [
...prevArray,
skill
skill,
]);
setSelectedSkills(
selectedSkills.filter((skill, indexSkill) => {
@ -277,7 +277,7 @@ export const PartnerAddRequest = () => {
onClick={() => {
setSelectedSkills((prevArray) => [
...prevArray,
skill
skill,
]);
setFilteredSkills(
filteredSkills.filter((skill, skillIndex) => {
@ -343,7 +343,7 @@ export const PartnerAddRequest = () => {
onChange={(e) =>
setInputs((prevValue) => ({
...prevValue,
description: e.target.value
description: e.target.value,
}))
}
/>

View File

@ -6,7 +6,7 @@ import {
getPartnerRequestId,
getPartnerRequests,
setPartnerRequestId,
setPartnerRequestInfo
setPartnerRequestInfo,
} from "@redux/outstaffingSlice";
import { urlForLocal } from "@utils/helper";
@ -57,8 +57,8 @@ export const PartnerBid = () => {
data: {
user_id: localStorage.getItem("id"),
request_id: requestId,
status: 0
}
status: 0,
},
}).then(() => {
navigate("/profile/requests");
});
@ -71,7 +71,7 @@ export const PartnerBid = () => {
1: "Junior",
2: "Middle",
3: "Middle+",
4: "Senior"
4: "Senior",
});
return (
<div className="partnerBid">
@ -107,7 +107,7 @@ export const PartnerBid = () => {
links={[
{ name: "Главная", link: "/profile" },
{ name: "Запросы и открытые позиции", link: "/profile/requests" },
{ name: "Просмотр заявки - PHP разработчик", link: "/profile/bid" }
{ name: "Просмотр заявки - PHP разработчик", link: "/profile/bid" },
]}
/>
<h2 className="partnerBid__title">Страница заявки </h2>

View File

@ -33,8 +33,8 @@ export const PartnerEmployees = () => {
{ name: "Данные моего персонала", link: "/profile/categories" },
{
name: "Backend разработчики",
link: "/profile/categories/employees"
}
link: "/profile/categories/employees",
},
]}
/>
<h2 className="partnerEmployees__title">Backend разработчики</h2>

View File

@ -4,7 +4,7 @@ import { Link, Navigate } from "react-router-dom";
import {
setPartnerRequestId,
setPartnerRequests
setPartnerRequests,
} from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
@ -48,7 +48,7 @@ export const PartnerRequests = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Запросы и открытые позиции", link: "/profile/requests" }
{ name: "Запросы и открытые позиции", link: "/profile/requests" },
]}
/>
<h2 className="partnerRequests__title">Запросы</h2>

View File

@ -21,12 +21,12 @@ export const PartnerSettings = () => {
const [inputsValue, setInputsValue] = useState({
name: "",
oldPassword: "",
password: ""
password: "",
});
const [inputsError, setInputsError] = useState({
name: false,
password: false
password: false,
});
const [loader, setLoader] = useState(false);
@ -44,37 +44,37 @@ export const PartnerSettings = () => {
apiRequest("/user/change-personal-data", {
method: "PUT",
data: {
newUsername: inputsValue.name
}
newUsername: inputsValue.name,
},
}).then((data) => {
apiRequest("/user/change-password", {
method: "PUT",
data: {
password: inputsValue.oldPassword,
newPassword: inputsValue.password
}
newPassword: inputsValue.password,
},
}).then((data) => {
setLoader(false);
if (data.status === "success") {
setInputsError({
name: false,
password: false
password: false,
});
setInputsValue({
name: "",
oldPassword: "",
password: ""
password: "",
});
showNotification({
show: true,
text: "Данные изменены",
type: "success"
type: "success",
});
} else {
showNotification({
show: true,
text: "Неверные данные",
type: "error"
type: "error",
});
}
});
@ -88,7 +88,7 @@ export const PartnerSettings = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Настройки", link: "/profile/settings" }
{ name: "Настройки", link: "/profile/settings" },
]}
/>
<div className="partner-settings">
@ -105,11 +105,11 @@ export const PartnerSettings = () => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
name: e.target.value
name: e.target.value,
}));
setInputsError((prevValue) => ({
...prevValue,
name: false
name: false,
}));
}}
value={inputsValue.name}
@ -128,11 +128,11 @@ export const PartnerSettings = () => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
oldPassword: e.target.value
oldPassword: e.target.value,
}));
setInputsError((prevValue) => ({
...prevValue,
password: false
password: false,
}));
}}
value={inputsValue.oldPassword}
@ -149,11 +149,11 @@ export const PartnerSettings = () => {
onChange={(e) => {
setInputsValue((prevValue) => ({
...prevValue,
password: e.target.value
password: e.target.value,
}));
setInputsError((prevValue) => ({
...prevValue,
password: false
password: false,
}));
}}
value={inputsValue.password}

View File

@ -31,7 +31,7 @@ export const PartnerTreaties = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Договора и отчетность", link: "/profile/treaties" }
{ name: "Договора и отчетность", link: "/profile/treaties" },
]}
/>
<h2 className="treaties__title">Договора и отчетность</h2>

View File

@ -37,7 +37,7 @@ export const PartnerCategories = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: BackEndImg
img: BackEndImg,
},
{
title: "Frontend разработчики",
@ -45,14 +45,14 @@ export const PartnerCategories = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: FrontendImg
img: FrontendImg,
},
{
title: "Архитектура проектов",
link: "/profile/categories/employees",
description: "Потоки данных ER ERP CRM CQRS UML BPMN",
available: true,
img: ArchitectureImg
img: ArchitectureImg,
},
{
title: "Дизайн проектов",
@ -60,35 +60,35 @@ export const PartnerCategories = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: DesignImg
img: DesignImg,
},
{
title: "Тестирование проектов",
link: "/profile/add-request",
description: "SQL Postman TestRail Kibana Ручное тестирование",
available: false,
img: TestImg
img: TestImg,
},
{
title: "Администрирование проектов",
link: "/profile/add-request",
description: "DevOps ELK Kubernetes Docker Bash Apache Oracle Git",
available: false,
img: AdminImg
img: AdminImg,
},
{
title: "Управление проектом",
link: "/profile/add-request",
description: "Scrum Kanban Agile Miro CustDev",
available: false,
img: ManageImg
img: ManageImg,
},
{
title: "Копирайтинг проектов",
link: "/profile/add-request",
description: "Теги Заголовок H1 Дескриптор Абзац Сценарий",
available: false,
img: CopyImg
img: CopyImg,
},
{
title: "Реклама и SMM",
@ -96,8 +96,8 @@ export const PartnerCategories = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: false,
img: SmmImg
}
img: SmmImg,
},
]);
const [mokPersons] = useState([
@ -109,7 +109,7 @@ export const PartnerCategories = () => {
project: "Админка НВД Консалтинг",
tasks_in_progress: 5,
month_hours: 140,
id: 1
id: 1,
},
{
personAvatar: avatarImg,
@ -119,7 +119,7 @@ export const PartnerCategories = () => {
project: "Админка НВД Консалтинг",
tasks_in_progress: 5,
month_hours: 140,
id: 2
id: 2,
},
{
personAvatar: avatarImg,
@ -129,8 +129,8 @@ export const PartnerCategories = () => {
project: "Админка НВД Консалтинг",
tasks_in_progress: 5,
month_hours: 140,
id: 3
}
id: 3,
},
]);
return (
<div className="partnerCategories">
@ -140,7 +140,7 @@ export const PartnerCategories = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Данные моего персонала", link: "/profile/categories" }
{ name: "Данные моего персонала", link: "/profile/categories" },
]}
/>
<h2 className="partnerCategories__title">Данные персонала</h2>

View File

@ -31,32 +31,32 @@ export const Profile = () => {
path: "profile/calendar",
img: reportsIcon,
title: "Ваша отчетность",
description: "<span></span>Отработанных в этом месяце часов"
description: "<span></span>Отработанных в этом месяце часов",
},
{
path: "profile/summary",
img: summaryIcon,
title: "Резюме",
description: "Ваше резюме<br/><span>заполнено</span>"
description: "Ваше резюме<br/><span>заполнено</span>",
},
{
path: "profile/tracker",
img: timerIcon,
title: "Трекер времени",
description: "Сколько времени занимает<br/> выполнение задач"
description: "Сколько времени занимает<br/> выполнение задач",
},
{
path: "profile/payouts",
img: paymentIcon,
title: "Выплаты",
description: "У вас <span>подтвержден</span><br/> статус самозанятого"
description: "У вас <span>подтвержден</span><br/> статус самозанятого",
},
{
path: "profile/settings",
img: settingIcon,
title: "Настройки профиля",
description: "Перейдите чтобы начать<br/> редактирование"
}
description: "Перейдите чтобы начать<br/> редактирование",
},
],
partner: [
{
@ -64,33 +64,33 @@ export const Profile = () => {
img: reportsIcon,
title: "Запросы и открытые позиции",
description:
"<span>У вас 2 вакансии<br/></span>открытые от лица компании"
"<span>У вас 2 вакансии<br/></span>открытые от лица компании",
},
{
path: "profile/categories",
img: summaryIcon,
title: "Данные персонала",
description: "Наши специалисты <br/><span>уже работающие у вас</span>"
description: "Наши специалисты <br/><span>уже работающие у вас</span>",
},
{
path: "profile/tracker",
img: timerIcon,
title: "Трекер времени",
description: "Контроль времени и<br/> выполнение задач"
description: "Контроль времени и<br/> выполнение задач",
},
{
path: "profile/treaties",
img: paymentIcon,
title: "Договора и отчетность",
description: "Ключевые условия<br/> договора"
description: "Ключевые условия<br/> договора",
},
{
path: "profile/settings",
img: settingIcon,
title: "Настройки профиля",
description: "Перейдите чтобы начать<br/> редактирование"
}
]
description: "Перейдите чтобы начать<br/> редактирование",
},
],
});
return (

View File

@ -20,14 +20,14 @@ export const ProfileCandidate = () => {
path: "quiz",
img: reportsIcon,
title: "Мои тесты",
description: "<span>У вас 122 часа<br/></span>отработанных в этом месяце"
description: "<span>У вас 122 часа<br/></span>отработанных в этом месяце",
},
{
path: "profile/settings",
img: settingIcon,
title: "Настройки профиля",
description: "Перейдите чтобы начать редактирование"
}
description: "Перейдите чтобы начать редактирование",
},
]);
return (
<div className="profile-candidate">

View File

@ -20,7 +20,7 @@ import {
setColumnName,
setColumnPriority,
setProjectBoardFetch,
setToggleTab
setToggleTab,
} from "@redux/projectsTrackerSlice";
import { urlForLocal } from "@utils/helper";
@ -73,7 +73,7 @@ export const ProjectTracker = () => {
const [tags, setTags] = useState({
open: false,
add: false,
edit: false
edit: false,
});
const [acceptModalOpen, setAcceptModalOpen] = useState(false);
const [currentColumnDelete, setCurrentColumnDelete] = useState(null);
@ -93,13 +93,13 @@ export const ProjectTracker = () => {
const priority = {
2: "Высокий",
1: "Средний",
0: "Низкий"
0: "Низкий",
};
const priorityClass = {
2: "high",
1: "middle",
0: "low"
0: "low",
};
useEffect(() => {
@ -117,7 +117,7 @@ export const ProjectTracker = () => {
if (column.tasks.length) columnsTasksEmpty = false;
setOpenColumnSelect((prevState) => ({
...prevState,
[column.id]: false
[column.id]: false,
}));
columnHover[column.id] = false;
column.tasks.forEach((task) => (tasksHover[task.id] = false));
@ -154,7 +154,7 @@ export const ProjectTracker = () => {
function dragEndTaskHandler() {
setTaskHover((prevState) => ({ [prevState]: false }));
setWrapperHover((prevState) => ({
[prevState]: false
[prevState]: false,
}));
}
@ -168,7 +168,7 @@ export const ProjectTracker = () => {
movePositionProjectTask({
startTask: startWrapperIndexTest.current.task,
finishTask: task,
finishIndex: finishTask
finishIndex: finishTask,
})
);
}
@ -184,7 +184,7 @@ export const ProjectTracker = () => {
setWrapperHover((prevState) => ({
[prevState]: false,
[columnId]: true
[columnId]: true,
}));
}
@ -192,7 +192,7 @@ export const ProjectTracker = () => {
e.preventDefault();
setWrapperHover((prevState) => ({
[prevState]: false
[prevState]: false,
}));
if (
@ -206,7 +206,7 @@ export const ProjectTracker = () => {
dispatch(
moveProjectTask({
startWrapperIndex: startWrapperIndexTest.current,
columnId
columnId,
})
);
}
@ -234,14 +234,14 @@ export const ProjectTracker = () => {
data: {
column_id: column.id,
project_id: projectBoard.id,
status: 0
}
status: 0,
},
}).then(() => {
if (column.priority < projectBoard.columns.length) {
for (let i = column.priority; i < projectBoard.columns.length; i++) {
const currentColumn = {
column_id: projectBoard.columns[i].id,
priority: i
priority: i,
};
priorityColumns.push(currentColumn);
}
@ -249,8 +249,8 @@ export const ProjectTracker = () => {
method: "POST",
data: {
project_id: projectBoard.id,
data: JSON.stringify(priorityColumns)
}
data: JSON.stringify(priorityColumns),
},
}).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id));
});
@ -266,8 +266,8 @@ export const ProjectTracker = () => {
method: "DELETE",
data: {
project_id: projectBoard.id,
user_id: userId
}
user_id: userId,
},
}).then(() => {
dispatch(deletePersonOnProject(userId));
});
@ -316,21 +316,21 @@ export const ProjectTracker = () => {
title: tagInfo.description,
slug: tagInfo.name,
color: color,
status: 1
}
status: 1,
},
}).then((data) => {
apiRequest("/mark/attach", {
method: "POST",
data: {
mark_id: data.id,
entity_type: 1,
entity_id: projectId.id
}
entity_id: projectId.id,
},
}).then((data) => {
dispatch(addNewTagToProject(data.mark));
setTags((prevState) => ({
...prevState,
add: false
add: false,
}));
});
});
@ -343,13 +343,13 @@ export const ProjectTracker = () => {
mark_id: tagInfo.editMarkId,
title: tagInfo.description,
slug: tagInfo.name,
color: color
}
color: color,
},
}).then(() => {
dispatch(setProjectBoardFetch(projectId.id));
setTags((prevState) => ({
...prevState,
edit: false
edit: false,
}));
setTagInfo({ description: "", name: "" });
setColor("#aabbcc");
@ -362,8 +362,8 @@ export const ProjectTracker = () => {
data: {
mark_id: tagId,
entity_type: 1,
entity_id: projectId.id
}
entity_id: projectId.id,
},
}).then(() => {
dispatch(deleteTagProject(tagId));
});
@ -412,11 +412,11 @@ export const ProjectTracker = () => {
setTags({
open: false,
add: false,
edit: false
edit: false,
});
setTagInfo({
description: "",
name: ""
name: "",
});
setColor("#aabbcc");
}
@ -453,7 +453,7 @@ export const ProjectTracker = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Трекер", link: "/profile/tracker" }
{ name: "Трекер", link: "/profile/tracker" },
]}
/>
<h2 className="tracker__title">Управление проектами с трекером</h2>
@ -705,7 +705,7 @@ export const ProjectTracker = () => {
onClick={() => {
setTags((prevState) => ({
...prevState,
open: !tags.open
open: !tags.open,
}));
}}
>
@ -719,7 +719,7 @@ export const ProjectTracker = () => {
onClick={() =>
setTags((prevState) => ({
...prevState,
add: true
add: true,
}))
}
>
@ -751,12 +751,12 @@ export const ProjectTracker = () => {
onClick={() => {
setTags((prevState) => ({
...prevState,
edit: true
edit: true,
}));
setTagInfo({
description: tag.title,
name: tag.slug,
editMarkId: tag.id
editMarkId: tag.id,
});
setColor(tag.color);
}}
@ -784,11 +784,11 @@ export const ProjectTracker = () => {
setTags((prevState) => ({
...prevState,
add: false,
edit: false
edit: false,
}));
setTagInfo({
description: "",
name: ""
name: "",
});
setColor("#aabbcc");
}}
@ -801,7 +801,7 @@ export const ProjectTracker = () => {
onChange={(e) =>
setTagInfo((prevState) => ({
...prevState,
description: e.target.value
description: e.target.value,
}))
}
/>
@ -813,7 +813,7 @@ export const ProjectTracker = () => {
onChange={(e) =>
setTagInfo((prevState) => ({
...prevState,
name: e.target.value
name: e.target.value,
}))
}
/>
@ -890,7 +890,7 @@ export const ProjectTracker = () => {
onClick={() => {
setOpenColumnSelect((prevState) => ({
...prevState,
[column.id]: true
[column.id]: true,
}));
}}
className="more"
@ -906,7 +906,7 @@ export const ProjectTracker = () => {
onClick={() => {
setOpenColumnSelect((prevState) => ({
...prevState,
[column.id]: false
[column.id]: false,
}));
dispatch(modalToggle("editColumn"));
dispatch(setColumnName(column.title));
@ -970,7 +970,7 @@ export const ProjectTracker = () => {
</div>
<p
dangerouslySetInnerHTML={{
__html: task.description
__html: task.description,
}}
className="tasks__board__item__description"
></p>

View File

@ -15,13 +15,13 @@ const tasks = [
{
index: 1,
text: "Задача «67 Навигационная система Главное меню Обновить иконки» заблокирована из-за отсутствия новых иконок",
hours: 3
hours: 3,
},
{
index: 2,
text: "Задача «83 Навигационная система Поиск по почтовому индексу Добавить экран поиска по почтовому индексу» не может быть завершена, т.к. работа над задачей «82 Навигационная система Разработать модуль поиска по почтовому индексу» ещё не начата",
hours: 3
}
hours: 3,
},
];
const SingleReportPage = () => {

View File

@ -29,29 +29,29 @@ const Statistics = () => {
name: "Дмитрий Рогов",
email: "dmitryi.zavadskyi@yandex.ru",
role: "Программист",
status: true
status: true,
},
{
avatar: mockAvatar,
name: "Марина Орехова",
email: "dmitryi.zavadskyi@yandex.ru",
role: "Менеджер",
status: true
status: true,
},
{
avatar: mockAvatar,
name: "Тамара Доценко",
email: "dmitryi.zavadskyi@yandex.ru51515188151",
role: "Тестировщик",
status: false
status: false,
},
{
avatar: mockAvatar,
name: "Кек Лолов",
email: "dm4124gmail.com",
role: "PM",
status: false
}
status: false,
},
];
const toggleTabs = (index) => {
@ -66,7 +66,7 @@ const Statistics = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Трекер", link: "/profile/tracker" }
{ name: "Трекер", link: "/profile/tracker" },
]}
/>
<h2 className="tracker__title">Управление проектами с трекером</h2>

View File

@ -60,9 +60,9 @@ export const Summary = () => {
method: "PUT",
data: {
UserCard: {
skill: selectedSkills.map((item) => item.skill_id)
}
}
skill: selectedSkills.map((item) => item.skill_id),
},
},
}).then(() => {});
}
@ -70,8 +70,8 @@ export const Summary = () => {
apiRequest("/resume/edit-text", {
method: "PUT",
data: {
resume: summery
}
resume: summery,
},
}).then(() => {});
}
return (
@ -83,7 +83,7 @@ export const Summary = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Резюме", link: "/profile/summary" }
{ name: "Резюме", link: "/profile/summary" },
]}
/>
<h2 className="summary__title">
@ -175,7 +175,7 @@ export const Summary = () => {
onClick={() =>
setSelectedSkills((prevValue) => [
...prevValue,
{ skill: skill, skill_id: skill.id }
{ skill: skill, skill_id: skill.id },
])
}
key={skill.id}
@ -235,8 +235,8 @@ export const Summary = () => {
"ImageToolbar",
"ImageUpload",
"MediaEmbed",
"BlockQuote"
]
"BlockQuote",
],
}}
onChange={(event, editor) => {
const data = editor.getData();

View File

@ -6,7 +6,7 @@ import {
getToggleTab,
modalToggle,
setAllProjects,
setToggleTab
setToggleTab,
} from "@redux/projectsTrackerSlice";
import { caseOfNum } from "@utils/helper";
@ -134,7 +134,7 @@ export const Tracker = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Трекер", link: "/profile/tracker" }
{ name: "Трекер", link: "/profile/tracker" },
]}
/>
<h2 className="tracker__title">Управление проектами с трекером</h2>

View File

@ -6,7 +6,7 @@ import { apiRequest } from "@api/request";
import {
getCorrectDate,
getCreatedDate,
hourOfNum
hourOfNum,
} from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
@ -57,7 +57,7 @@ export const ViewReport = () => {
const taskInfo = {
hours: task.hours_spent,
task: task.task,
id: task.id
id: task.id,
};
if (task.hours_spent) {
spendTime += Number(task.hours_spent);
@ -96,7 +96,7 @@ export const ViewReport = () => {
links={[
{ name: "Главная", link: "/profile" },
{ name: "Ваша отчетность", link: "/profile/calendar" },
{ name: "Просмотр отчета за день", link: "/profile/view" }
{ name: "Просмотр отчета за день", link: "/profile/view" },
]}
/>
<h2 className="viewReport__title">

View File

@ -27,7 +27,7 @@ export const PassingTests = () => {
autoStart: false,
onExpire: () => {
navigate("/quiz");
}
},
});
const onCloseWindow = (e) => {
@ -43,18 +43,18 @@ export const PassingTests = () => {
{
title: "Зачем?",
description:
"Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя."
"Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.",
},
{
title: "Почему именно тестирование?",
description:
"Тесты itguild заменяют первое техническое собеседование по любой вакансии."
"Тесты itguild заменяют первое техническое собеседование по любой вакансии.",
},
{
title: "Какие тесты нужно проходить?",
description:
"Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете."
}
"Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.",
},
];
function onSwitchTab(e) {
@ -86,7 +86,7 @@ export const PassingTests = () => {
links={[
{ name: "Главная", link: "/profile-candidate" },
{ name: "Тестирование", link: "/quiz" },
{ name: "Прохождение тестов", link: "/quiz/test" }
{ name: "Прохождение тестов", link: "/quiz/test" },
]}
/>
<div className="passing-tests-page__title main-title">

View File

@ -36,7 +36,7 @@ export const QuizPage = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: BackEndImg
img: BackEndImg,
},
{
title: "Frontend разработчики",
@ -44,14 +44,14 @@ export const QuizPage = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: FrontendImg
img: FrontendImg,
},
{
title: "Архитектура проектов",
link: "/registration-candidate",
description: "Потоки данных ER ERP CRM CQRS UML BPMN",
available: true,
img: ArchitectureImg
img: ArchitectureImg,
},
{
title: "Дизайн проектов",
@ -59,35 +59,35 @@ export const QuizPage = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: true,
img: DesignImg
img: DesignImg,
},
{
title: "Тестирование проектов",
link: "/registration-candidate",
description: "SQL Postman TestRail Kibana Ручное тестирование",
available: false,
img: TestImg
img: TestImg,
},
{
title: "Администрирование проектов",
link: "/registration-candidate",
description: "DevOps ELK Kubernetes Docker Bash Apache Oracle Git",
available: false,
img: AdminImg
img: AdminImg,
},
{
title: "Управление проектом",
link: "/registration-candidate",
description: "Scrum Kanban Agile Miro CustDev",
available: false,
img: ManageImg
img: ManageImg,
},
{
title: "Копирайтинг проектов",
link: "/registration-candidate",
description: "Теги Заголовок H1 Дескриптор Абзац Сценарий",
available: false,
img: CopyImg
img: CopyImg,
},
{
title: "Реклама и SMM",
@ -95,8 +95,8 @@ export const QuizPage = () => {
description:
"Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
available: false,
img: SmmImg
}
img: SmmImg,
},
]);
const userId = localStorage.getItem("id");
const [selectedCategory, setSetSelectedCategory] = useState(false);
@ -116,7 +116,7 @@ export const QuizPage = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile-candidate" },
{ name: "Тестирование", link: "/quiz" }
{ name: "Тестирование", link: "/quiz" },
]}
/>
<div className="quiz-page__title main-title">

View File

@ -43,7 +43,7 @@ export const QuizReportPage = () => {
links={[
{ name: "Главная", link: "/profile-candidate" },
{ name: "Тестирование", link: "/quiz" },
{ name: "Отчет по тестированию", link: "/quiz/report" }
{ name: "Отчет по тестированию", link: "/quiz/report" },
]}
/>
<div className="quiz-report-page__title main-title">

View File

@ -1,7 +1,7 @@
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
isLoading: false
isLoading: false,
};
export const loaderSlice = createSlice({
@ -10,8 +10,8 @@ export const loaderSlice = createSlice({
reducers: {
loading: (state, action) => {
state.isLoading = action.payload;
}
}
},
},
});
export const { loading } = loaderSlice.actions;

View File

@ -17,8 +17,8 @@ const initialState = {
notification: {
show: false,
text: "",
type: ""
}
type: "",
},
};
export const outstaffingSlice = createSlice({
@ -72,8 +72,8 @@ export const outstaffingSlice = createSlice({
},
closeNotification: (state) => {
state.notification.show = false;
}
}
},
},
});
export const {
@ -92,7 +92,7 @@ export const {
setPartnerRequests,
setPartnerRequestInfo,
setNotification,
closeNotification
closeNotification,
} = outstaffingSlice.actions;
export const selectProfiles = (state) => state.outstaffing.profiles;

View File

@ -10,7 +10,7 @@ const initialState = {
boardLoader: false,
columnName: "",
columnId: 0,
columnPriority: 0
columnPriority: 0,
};
export const setProjectBoardFetch = createAsyncThunk("userInfo", (id) =>
@ -61,15 +61,15 @@ export const projectsTrackerSlice = createSlice({
if (column.id === action.payload.columnId) {
column.tasks.push({
...action.payload.startWrapperIndex.task,
column_id: column.id
column_id: column.id,
});
apiRequest(`/task/update-task`, {
method: "PUT",
data: {
task_id: action.payload.startWrapperIndex.task.id,
column_id: column.id,
priority: column.tasks.length - 1
}
priority: column.tasks.length - 1,
},
}).then(() => {});
}
if (column.id === action.payload.startWrapperIndex.index) {
@ -89,20 +89,20 @@ export const projectsTrackerSlice = createSlice({
if (column.id === action.payload.finishTask.column_id) {
column.tasks.splice(action.payload.finishIndex, 0, {
...action.payload.startTask,
column_id: column.id
column_id: column.id,
});
apiRequest(`/task/update-task`, {
method: "PUT",
data: {
task_id: action.payload.startTask.id,
column_id: column.id
}
column_id: column.id,
},
}).then(() => {});
const priorityTasks = [];
column.tasks.forEach((task, index) => {
const curTask = {
task_id: task.id,
priority: index
priority: index,
};
priorityTasks.push(curTask);
});
@ -110,8 +110,8 @@ export const projectsTrackerSlice = createSlice({
method: "POST",
data: {
data: JSON.stringify(priorityTasks),
column_id: column.id
}
column_id: column.id,
},
}).then(() => {});
}
});
@ -162,14 +162,14 @@ export const projectsTrackerSlice = createSlice({
},
modalToggle: (state, action) => {
state.modalType = action.payload;
}
},
},
extraReducers: {
[setProjectBoardFetch.fulfilled]: (state, action) => {
state.projectBoard = action.payload;
state.boardLoader = false;
}
}
},
},
});
export const {
@ -192,7 +192,7 @@ export const {
filterCreatedByMe,
filteredParticipateTasks,
filteredExecutorTasks,
movePositionProjectTask
movePositionProjectTask,
} = projectsTrackerSlice.actions;
export const getProjects = (state) => state.tracker.projects;

View File

@ -8,7 +8,7 @@ const initialState = {
questionnaires: [],
completedTest: false,
selectedTest: {},
result: null
result: null,
};
export const fetchResultTest = createAsyncThunk("result", (uuid) =>
@ -26,13 +26,13 @@ export const quizSlice = createSlice({
},
setCompleteTest: (state) => {
state.completedTest = true;
}
},
},
extraReducers: {
[fetchResultTest.fulfilled]: (state, action) => {
state.result = action.payload;
}
}
},
},
});
export const { setQuestions } = quizSlice.actions;

View File

@ -4,7 +4,7 @@ const initialState = {
dateSelected: "",
reportDate: "",
requestDates: "",
sendRequest: ""
sendRequest: "",
};
export const reportSlice = createSlice({
@ -22,8 +22,8 @@ export const reportSlice = createSlice({
},
setSendRequest: (state, action) => {
state.sendRequest = action.payload;
}
}
},
},
});
export const { dateSelected, setReportDate, setRequestDate, setSendRequest } =

View File

@ -1,7 +1,7 @@
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
role: null
role: null,
};
export const roleSlice = createSlice({
@ -10,8 +10,8 @@ export const roleSlice = createSlice({
reducers: {
setRole: (state, action) => {
state.role = action.payload;
}
}
},
},
});
export const { setRole } = roleSlice.actions;

View File

@ -14,10 +14,10 @@ export const store = configureStore({
role: roleReducer,
report: reportReducer,
tracker: projectsTrackerSlice,
quiz: quizSlice
quiz: quizSlice,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: false
})
serializableCheck: false,
}),
});

View File

@ -2,7 +2,7 @@ export const LEVELS = {
1: "Junior",
2: "Middle",
3: "Middle+",
4: "Senior"
4: "Senior",
};
export const SKILLS = {
@ -11,5 +11,5 @@ export const SKILLS = {
3: "Маркетолог",
4: "Smm - специалист",
5: "Дизайнер",
6: "Копирайтер"
6: "Копирайтер",
};

View File

@ -50,7 +50,7 @@ export const backendImg = (url) => `https://back.itguild.info${url}`;
export function scrollToForm() {
window.scrollTo({
top: 850,
behavior: "smooth"
behavior: "smooth",
});
}
@ -77,7 +77,7 @@ export function caseOfNum(number, type) {
files: ["файл", "файла", "файлов"],
persons: ["участник", "участника", "участников"],
tasks: ["задача", "задачи", "задач"],
projects: ["проект", "проекта", "проектов"]
projects: ["проект", "проекта", "проектов"],
};
const cases = [2, 0, 1, 1, 1, 2];
return allTypes[type][