Compare commits
No commits in common. "5d03502e5c48a3283f44d7a61a8116d67b0bdbfc" and "05f966b87717bd9334f8d0095cc23c84bf0e24b8" have entirely different histories.
5d03502e5c
...
05f966b877
@ -3,7 +3,6 @@
|
||||
"semi": true,
|
||||
"printWidth": 80,
|
||||
"useTabs": false,
|
||||
"trailingComma" : "none",
|
||||
"importOrder": [
|
||||
"^@react/(.*)$",
|
||||
"^@redux/(.*)$",
|
||||
|
@ -1,5 +1,5 @@
|
||||
module.exports = {
|
||||
"postcss-preset-env": {
|
||||
browsers: "last 2 versions"
|
||||
}
|
||||
browsers: "last 2 versions",
|
||||
},
|
||||
};
|
||||
|
@ -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,
|
||||
});
|
||||
|
@ -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) =>
|
||||
|
@ -12,7 +12,7 @@ const ArchiveTasksItem = ({ task, index }) => {
|
||||
<p
|
||||
className="date"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: task.description
|
||||
__html: task.description,
|
||||
}}
|
||||
/>
|
||||
</td>
|
||||
|
@ -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("Введены некорректные данные для входа");
|
||||
|
@ -86,7 +86,7 @@ export function getCorrectDate(day) {
|
||||
"сентября",
|
||||
"октября",
|
||||
"ноября",
|
||||
"декабря"
|
||||
"декабря",
|
||||
];
|
||||
return `${new Date(day).getDate()} ${
|
||||
months[new Date(day).getMonth()]
|
||||
|
@ -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}`,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
|
@ -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 (
|
||||
|
@ -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);
|
||||
});
|
||||
|
@ -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);
|
||||
|
@ -23,7 +23,7 @@ export const FreeDevelopers = () => {
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/auth" },
|
||||
{ name: "Свободные разработчики", link: "/worker" }
|
||||
{ name: "Свободные разработчики", link: "/worker" },
|
||||
]}
|
||||
/>
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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"
|
||||
|
@ -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,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
|
@ -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,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
|
@ -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();
|
||||
|
@ -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(() => {
|
||||
|
@ -15,7 +15,7 @@ const images = {
|
||||
archive: archive,
|
||||
error: error,
|
||||
copy: copy,
|
||||
success: success
|
||||
success: success,
|
||||
};
|
||||
|
||||
export const Notification = () => {
|
||||
|
@ -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 (
|
||||
<>
|
||||
|
@ -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,
|
||||
})
|
||||
}
|
||||
>
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -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;
|
||||
})
|
||||
|
@ -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,
|
||||
};
|
||||
})
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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 (
|
||||
|
@ -27,7 +27,7 @@ export const TrackerSelectColumn = ({ columns, task, currentColumn }) => {
|
||||
dispatch(
|
||||
moveProjectTask({
|
||||
startWrapperIndex: { index: currentColumn.id, task },
|
||||
columnId: column.id
|
||||
columnId: column.id,
|
||||
})
|
||||
);
|
||||
}}
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
}, []);
|
||||
|
||||
|
@ -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 () => {
|
||||
|
@ -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") {
|
||||
|
@ -2,7 +2,7 @@ import React, { Component } from "react";
|
||||
|
||||
class ErrorBoundary extends Component {
|
||||
state = {
|
||||
error: null
|
||||
error: null,
|
||||
};
|
||||
|
||||
static getDerivedStateFromError(error) {
|
||||
|
@ -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,
|
||||
},
|
||||
]);
|
||||
};
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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(() => {
|
||||
|
@ -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>
|
||||
|
@ -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)));
|
||||
}
|
||||
}, []);
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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,
|
||||
}))
|
||||
}
|
||||
/>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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}
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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 (
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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 = () => {
|
||||
|
@ -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>
|
||||
|
@ -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();
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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">
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 } =
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
}),
|
||||
});
|
||||
|
@ -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: "Копирайтер",
|
||||
};
|
||||
|
@ -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][
|
||||
|
Loading…
Reference in New Issue
Block a user