Merge pull request #97 from apuc/add-husky-eslint

Add husky and eslint
This commit is contained in:
MaxOvs19 2023-06-02 19:47:41 +03:00 committed by GitHub
commit 32d6bbc345
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
96 changed files with 1919 additions and 2021 deletions

21
.eslintrc.json Normal file
View File

@ -0,0 +1,21 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": ["eslint:recommended", "plugin:react/recommended"],
"overrides": [],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": ["react"],
"rules": {
"no-console": "warn",
"react/prop-types": 0,
"no-undef": "warn",
"react/no-unescaped-entities": 0,
"no-extra-boolean-cast": "warn",
"react/react-in-jsx-scope": 0
}
}

5
.husky/pre-commit Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run format
npm run lint

7
.prettierignore Normal file
View File

@ -0,0 +1,7 @@
node_modules
config
public
*-lock.json
App.js

View File

@ -2,5 +2,18 @@
"tabWidth": 2, "tabWidth": 2,
"semi": true, "semi": true,
"printWidth": 80, "printWidth": 80,
"useTabs": false "useTabs": false,
"importOrder": [
"^@react/(.*)$",
"^@redux/(.*)$",
"^@utils/(.*)$",
"^@api/(.*)$",
"^@hooks/(.*)$",
"^@pages/(.*)$",
"^@components/(.*)$",
"^assets/(.*)$",
"^[./]"
],
"importOrderSeparation": true,
"importOrderSortSpecifiers": true
} }

709
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -49,11 +49,14 @@
"@babel/core": "^7.20.12", "@babel/core": "^7.20.12",
"@babel/preset-env": "^7.20.2", "@babel/preset-env": "^7.20.2",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
"copy-webpack-plugin": "^10.2.0", "copy-webpack-plugin": "^10.2.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"css-loader": "6.7.3", "css-loader": "6.7.3",
"dotenv-webpack": "^7.0.3", "dotenv-webpack": "^7.0.3",
"eslint": "^8.41.0",
"eslint-plugin-react": "^7.32.2",
"html-webpack-plugin": "5.5.0", "html-webpack-plugin": "5.5.0",
"mini-css-extract-plugin": "^2.7.2", "mini-css-extract-plugin": "^2.7.2",
"node-sass": "8.0.0", "node-sass": "8.0.0",
@ -71,12 +74,16 @@
"webpack-bundle-analyzer": "4.7.0", "webpack-bundle-analyzer": "4.7.0",
"webpack-cli": "^5.0.1", "webpack-cli": "^5.0.1",
"webpack-dev-server": "4.11.1", "webpack-dev-server": "4.11.1",
"webpack-merge": "5.8.0" "webpack-merge": "5.8.0",
"husky": "^8.0.0"
}, },
"scripts": { "scripts": {
"build": "cross-env SERVE=true webpack -c config/webpack/prod.js", "build": "cross-env SERVE=true webpack -c config/webpack/prod.js",
"start": "webpack serve -c config/webpack/dev.js", "start": "webpack serve -c config/webpack/dev.js",
"analyze": "webpack --analyze -c config/webpack/analyze.js" "analyze": "webpack --analyze -c config/webpack/analyze.js",
"format": "prettier --write \"./**/*.{js,jsx}\"",
"lint": "npx eslint 'src/**/*.{js,jsx,ts,tsx}'",
"prepare": "husky install"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [

View File

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

View File

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

View File

@ -1,4 +1,5 @@
import axios from "axios"; import axios from "axios";
import { getToken, urlHasParams } from "@utils/helper"; import { getToken, urlHasParams } from "@utils/helper";
const instance = axios.create({ const instance = axios.create({

View File

@ -1,16 +1,17 @@
import React, { useEffect, useRef, useState } from "react"; import React, { useEffect, useRef, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { useNavigate } from "react-router-dom";
import { auth, selectAuth, setUserInfo } from "@redux/outstaffingSlice";
import { loading, selectIsLoading } from "@redux/loaderSlice"; import { loading, selectIsLoading } from "@redux/loaderSlice";
import { auth, selectAuth, setUserInfo } from "@redux/outstaffingSlice";
import { setRole } from "@redux/roleSlice"; import { setRole } from "@redux/roleSlice";
import ModalRegistration from "@components/Modal/ModalRegistration/ModalRegistration";
import ModalErrorLogin from "@components/Modal/ModalErrorLogin/ModalErrorLogin";
import { Loader } from "@components/Common/Loader/Loader";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import { Loader } from "@components/Common/Loader/Loader";
import ModalErrorLogin from "@components/Modal/ModalErrorLogin/ModalErrorLogin";
import ModalRegistration from "@components/Modal/ModalRegistration/ModalRegistration";
import ellipse from "assets/icons/ellipse.png"; import ellipse from "assets/icons/ellipse.png";
import "./authBox.scss"; import "./authBox.scss";

View File

@ -2,16 +2,18 @@ import React, { useEffect, useState } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link, Navigate, useNavigate } from "react-router-dom"; import { Link, Navigate, useNavigate } from "react-router-dom";
import CalendarComponent from "./CalendarComponent"; import { selectCurrentCandidate } from "@redux/outstaffingSlice";
import { currentMonth } from "./calendarHelper";
import { urlForLocal } from "@utils/helper";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { LogoutButton } from "@components/LogoutButton/LogoutButton"; import { LogoutButton } from "@components/LogoutButton/LogoutButton";
import { urlForLocal } from "@utils/helper";
import { selectCurrentCandidate } from "@redux/outstaffingSlice";
import rectangle from "assets/images/rectangle_secondPage.png"; import rectangle from "assets/images/rectangle_secondPage.png";
import CalendarComponent from "./CalendarComponent";
import "./calendar.scss"; import "./calendar.scss";
import { currentMonth } from "./calendarHelper";
const Calendar = () => { const Calendar = () => {
if (localStorage.getItem("role_status") !== "18") { if (localStorage.getItem("role_status") !== "18") {

View File

@ -1,15 +1,13 @@
import React, { useState, useEffect } from "react"; import moment from "moment";
import { calendarHelper, currentMonthAndDay } from "./calendarHelper"; import "moment/locale/ru";
import React, { useEffect, useState } from "react";
import calendarIcon from "assets/icons/calendar.svg";
import ellipse from "assets/icons/ellipse.png"; import ellipse from "assets/icons/ellipse.png";
import rectangle from "assets/images/rectangle__calendar.png"; import rectangle from "assets/images/rectangle__calendar.png";
import calendarIcon from "assets/icons/calendar.svg";
import moment from "moment";
import "moment/locale/ru";
import "./calendarComponent.scss"; import "./calendarComponent.scss";
import { calendarHelper, currentMonthAndDay } from "./calendarHelper";
const CalendarComponent = ({ onSelect }) => { const CalendarComponent = ({ onSelect }) => {
const [value, setValue] = useState(moment()); const [value, setValue] = useState(moment());

View File

@ -1,29 +1,30 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useParams, Link, useNavigate, Navigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux";
import { useSelector, useDispatch } from "react-redux"; import { Link, Navigate, useNavigate, useParams } from "react-router-dom";
import SkillSection from "@components/SkillSection/SkillSection";
import Sidebar from "@components/CandidateSidebar/CandidateSidebar";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { import {
currentCandidate, currentCandidate,
selectCurrentCandidate, selectCurrentCandidate,
} from "@redux/outstaffingSlice"; } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
import { createMarkup } from "@utils/helper";
import { LEVELS, SKILLS } from "@utils/constants"; import { LEVELS, SKILLS } from "@utils/constants";
import { createMarkup } from "@utils/helper";
import { apiRequest } from "@api/request";
import Sidebar from "@components/CandidateSidebar/CandidateSidebar";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import SkillSection from "@components/SkillSection/SkillSection";
import rightArrow from "assets/icons/arrows/arrowRight.svg";
import gitImgItem from "assets/icons/gitItemImg.svg"; import gitImgItem from "assets/icons/gitItemImg.svg";
import rectangle from "assets/images/rectangle_secondPage.png";
import front from "assets/images/partnerProfile/front-end.webp";
import back from "assets/images/partnerProfile/back-end.webp"; import back from "assets/images/partnerProfile/back-end.webp";
import design from "assets/images/partnerProfile/design.webp"; import design from "assets/images/partnerProfile/design.webp";
import rightArrow from "assets/icons/arrows/arrowRight.svg"; import front from "assets/images/partnerProfile/front-end.webp";
import rectangle from "assets/images/rectangle_secondPage.png";
import "./candidate.scss"; import "./candidate.scss";

View File

@ -1,11 +1,11 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { LEVELS, SKILLS } from "@utils/constants";
import { urlForLocal } from "@utils/helper";
import { Achievement } from "@components/Achievement/Achievement"; import { Achievement } from "@components/Achievement/Achievement";
import ModalAspirant from "@components/Modal/ModalAspirant/ModalAspirant"; import ModalAspirant from "@components/Modal/ModalAspirant/ModalAspirant";
import { urlForLocal } from "@utils/helper";
import { LEVELS, SKILLS } from "@utils/constants";
import "./candidateSidebar.scss"; import "./candidateSidebar.scss";
const getYearsString = (years) => { const getYearsString = (years) => {

View File

@ -1,23 +1,23 @@
import React from "react"; import React from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import rightArrow from "assets/icons/arrows/arrowRight.svg"; import rightArrow from "assets/icons/arrows/arrowRight.svg";
import "./CardControl.scss"; import "./CardControl.scss";
export const CardControl = ({ title, path, description, img }) => { export const CardControl = ({ title, path, description, img }) => {
return ( return (
<Link to={`/${path}`} className="control-card"> <Link to={`/${path}`} className="control-card">
<div className="control-card__about"> <div className="control-card__about">
<img src={img} alt="itemImg" /> <img src={img} alt="itemImg" />
<h3>{title}</h3> <h3>{title}</h3>
</div> </div>
<div className="control-card__info"> <div className="control-card__info">
<p dangerouslySetInnerHTML={{ __html: description }}></p> <p dangerouslySetInnerHTML={{ __html: description }}></p>
<div className="control-card__infoLink"> <div className="control-card__infoLink">
<img src={rightArrow} alt="arrow" /> <img src={rightArrow} alt="arrow" />
</div> </div>
</div> </div>
</Link> </Link>
); );
}; };

View File

@ -7,7 +7,7 @@ import userIcon from "assets/icons/userIcon.svg";
import "./authHeader.scss"; import "./authHeader.scss";
export const AuthHeader = ({}) => { export const AuthHeader = () => {
return ( return (
<div className="auth-header"> <div className="auth-header">
<div className="auth-header__logo"> <div className="auth-header__logo">

View File

@ -1,9 +1,9 @@
import React from "react"; import React from "react";
import logo from "assets/images/logo/LogoITguild.svg";
import vk from "assets/icons/vkLogo.svg";
import tg from "assets/icons/tgFooter.svg";
import email from "assets/icons/emailLogo.svg"; import email from "assets/icons/emailLogo.svg";
import tg from "assets/icons/tgFooter.svg";
import vk from "assets/icons/vkLogo.svg";
import logo from "assets/images/logo/LogoITguild.svg";
import "./footer.scss"; import "./footer.scss";

View File

@ -2,18 +2,18 @@ import React from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import ErrorBoundary from "../../hoc/ErrorBoundary"; import { selectProfiles } from "@redux/outstaffingSlice";
import { LEVELS, SKILLS } from "@utils/constants"; import { LEVELS, SKILLS } from "@utils/constants";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import { selectProfiles } from "@redux/outstaffingSlice";
import rectangle from "assets/images/rectangle_secondPage.png";
import cursorImg from "assets/icons/cursorImg.svg"; import cursorImg from "assets/icons/cursorImg.svg";
import rectangle from "assets/images/rectangle_secondPage.png";
import ErrorBoundary from "../../hoc/ErrorBoundary";
import "./description.scss"; import "./description.scss";
const Description = ({ onLoadMore, isLoadingMore }) => { const Description = ({ onLoadMore }) => {
const candidatesListArr = useSelector(selectProfiles); const candidatesListArr = useSelector(selectProfiles);
return ( return (

View File

@ -1,13 +1,14 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useParams, useNavigate } from "react-router-dom";
import PhoneInput from "react-phone-input-2"; import PhoneInput from "react-phone-input-2";
import "react-phone-input-2/lib/style.css";
import { apiRequest } from "@api/request"; import { useNavigate, useParams } from "react-router-dom";
import { Loader } from "@components/Common/Loader/Loader";
import Swal from "sweetalert2"; import Swal from "sweetalert2";
import withReactContent from "sweetalert2-react-content"; import withReactContent from "sweetalert2-react-content";
import "react-phone-input-2/lib/style.css"; import { apiRequest } from "@api/request";
import { Loader } from "@components/Common/Loader/Loader";
import "./form.scss"; import "./form.scss";
const SweetAlert = withReactContent(Swal); const SweetAlert = withReactContent(Swal);
@ -28,8 +29,10 @@ const Form = () => {
const handleModal = (status) => { const handleModal = (status) => {
SweetAlert.fire({ SweetAlert.fire({
text: text:
// eslint-disable-next-line no-constant-condition
status !== 200 || 201 ? "Какие-то неполадки =(" : "Форма отправлена", status !== 200 || 201 ? "Какие-то неполадки =(" : "Форма отправлена",
preConfirm: () => preConfirm: () =>
// eslint-disable-next-line no-constant-condition
status !== 200 || 201 status !== 200 || 201
? () => { ? () => {
setStatus(null); setStatus(null);

View File

@ -4,17 +4,17 @@ import { Link } from "react-router-dom";
import { scrollToForm } from "@utils/helper"; import { scrollToForm } from "@utils/helper";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import SideBar from "@components/SideBar/SideBar"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import SideBar from "@components/SideBar/SideBar";
import mockWorker from "assets/images/mock/mokPerson.png";
import arrow from "assets/icons/arrows/arrow_left.png"; import arrow from "assets/icons/arrows/arrow_left.png";
import mockWorker from "assets/images/mock/mokPerson.png";
import "./freeDevelopers.scss"; import "./freeDevelopers.scss";
export const FreeDevelopers = ({}) => { export const FreeDevelopers = () => {
return ( return (
<section className="free-dev"> <section className="free-dev">
<AuthHeader /> <AuthHeader />

View File

@ -1,30 +1,30 @@
import React from "react"; import React from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import questionIcon from "assets/images/faq/question.svg"; import questionIcon from "assets/images/faq/question.svg";
import "./FrequentlyAskedQuestionsItem.scss"; import "./FrequentlyAskedQuestionsItem.scss";
export const FrequentlyAskedQuestionsItem = ({ rubric }) => { export const FrequentlyAskedQuestionsItem = ({ rubric }) => {
return ( return (
<div className="frequently-asked-questions-item"> <div className="frequently-asked-questions-item">
<div className="frequently-asked-questions-item__head"> <div className="frequently-asked-questions-item__head">
<div className="frequently-asked-questions-item__icon-question"> <div className="frequently-asked-questions-item__icon-question">
<img src={questionIcon} alt="" /> <img src={questionIcon} alt="" />
</div> </div>
<div className="frequently-asked-questions-item__title"> <div className="frequently-asked-questions-item__title">
{rubric?.title} {rubric?.title}
</div> </div>
</div> </div>
{rubric?.questions?.map((question) => ( {rubric?.questions?.map((question) => (
<Link <Link
key={question.id} key={question.id}
to={`/frequently-asked-question/${question.id}`} to={`/frequently-asked-question/${question.id}`}
className="frequently-asked-questions-item__body" className="frequently-asked-questions-item__body"
> >
<p>{question.title}</p> <p>{question.title}</p>
</Link> </Link>
))} ))}
</div> </div>
); );
}; };

View File

@ -1,10 +1,12 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { useNavigate } from "react-router-dom";
import { getRole } from "@redux/roleSlice";
import { useLogout } from "@hooks/useLogout"; import { useLogout } from "@hooks/useLogout";
import { Loader } from "@components/Common/Loader/Loader"; import { Loader } from "@components/Common/Loader/Loader";
import { getRole } from "@redux/roleSlice";
import "./logoutButton.scss"; import "./logoutButton.scss";

View File

@ -1,13 +1,13 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import avatar from "assets/images/mock/mokPerson.png";
import logoTg from "assets/icons/tgLogo.svg";
import arrow from "assets/icons/arrows/left-arrow.png"; import arrow from "assets/icons/arrows/left-arrow.png";
import logoTg from "assets/icons/tgLogo.svg";
import interview from "assets/images/logo/interviewLogo.svg"; import interview from "assets/images/logo/interviewLogo.svg";
import avatar from "assets/images/mock/mokPerson.png";
import "./modalAspirant.scss"; import "./modalAspirant.scss";

View File

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import "./modalErrorLogin.scss"; import "./modalErrorLogin.scss";

View File

@ -1,11 +1,11 @@
import React from "react"; import React from "react";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import telegramLogo from "assets/icons/tgLogo.svg";
import doc from "assets/icons/doc.svg";
import anyMoment from "assets/icons/anyMoment.svg"; import anyMoment from "assets/icons/anyMoment.svg";
import doc from "assets/icons/doc.svg";
import telegramLogo from "assets/icons/tgLogo.svg";
import "./modalRegistration.scss"; import "./modalRegistration.scss";

View File

@ -1,28 +1,30 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { Link } from "react-router-dom";
import { modalToggle, setProjectBoardFetch } from "@redux/projectsTrackerSlice";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import { urlForLocal } from "@utils/helper";
import { modalToggle, setProjectBoardFetch } from "@redux/projectsTrackerSlice";
import { getCorrectDate } from "@components/Calendar/calendarHelper"; import { getCorrectDate } from "@components/Calendar/calendarHelper";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import category from "assets/icons/category.svg";
import watch from "assets/icons/watch.svg";
import file from "assets/icons/fileModal.svg";
import arrow from "assets/icons/arrows/arrowStart.png";
import link from "assets/icons/link.svg";
import archive from "assets/icons/archive.svg"; import archive from "assets/icons/archive.svg";
import arrow from "assets/icons/arrows/arrowStart.png";
import fullScreen from "assets/icons/arrows/inFullScreen.svg";
import category from "assets/icons/category.svg";
import close from "assets/icons/closeProjectPersons.svg";
import del from "assets/icons/delete.svg"; import del from "assets/icons/delete.svg";
import edit from "assets/icons/edit.svg"; import edit from "assets/icons/edit.svg";
import send from "assets/icons/send.svg"; import file from "assets/icons/fileModal.svg";
import link from "assets/icons/link.svg";
import plus from "assets/icons/plus.svg"; import plus from "assets/icons/plus.svg";
import fullScreen from "assets/icons/arrows/inFullScreen.svg"; import send from "assets/icons/send.svg";
import close from "assets/icons/closeProjectPersons.svg"; import watch from "assets/icons/watch.svg";
import "./ModalTicket.scss"; import "./ModalTicket.scss";
@ -58,7 +60,7 @@ export const ModalTiсket = ({
task_id: task.id, task_id: task.id,
status: 0, status: 0,
}, },
}).then((res) => { }).then(() => {
setActive(false); setActive(false);
dispatch(setProjectBoardFetch(projectId)); dispatch(setProjectBoardFetch(projectId));
}); });
@ -72,7 +74,7 @@ export const ModalTiсket = ({
title: inputsValue.title, title: inputsValue.title,
description: inputsValue.description, description: inputsValue.description,
}, },
}).then((res) => { }).then(() => {
dispatch(setProjectBoardFetch(projectId)); dispatch(setProjectBoardFetch(projectId));
}); });
} }
@ -104,7 +106,7 @@ export const ModalTiсket = ({
comment_id: commentId, comment_id: commentId,
status: 0, status: 0,
}, },
}).then((res) => { }).then(() => {
setComments((prevValue) => setComments((prevValue) =>
prevValue.filter((item) => item.id !== commentId) prevValue.filter((item) => item.id !== commentId)
); );
@ -118,7 +120,7 @@ export const ModalTiсket = ({
comment_id: commentId, comment_id: commentId,
text: commentsEditText[commentId], text: commentsEditText[commentId],
}, },
}).then((res) => {}); }).then(() => {});
} }
function taskExecutor(person) { function taskExecutor(person) {
@ -141,7 +143,7 @@ export const ModalTiсket = ({
task_id: task.id, task_id: task.id,
executor_id: 0, executor_id: 0,
}, },
}).then((res) => { }).then(() => {
setExecutor(null); setExecutor(null);
}); });
} }
@ -166,7 +168,7 @@ export const ModalTiсket = ({
task_id: task.id, task_id: task.id,
user_id: person.user_id, user_id: person.user_id,
}, },
}).then((res) => { }).then(() => {
setMembers(members.filter((item) => item.user_id !== person.user_id)); setMembers(members.filter((item) => item.user_id !== person.user_id));
}); });
} }

View File

@ -1,46 +1,48 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Link, useParams, useNavigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { Link, useNavigate, useParams } from "react-router-dom";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import { Navigation } from "@components/Navigation/Navigation";
import { Loader } from "@components/Common/Loader/Loader";
import { import {
deletePersonOnProject, deletePersonOnProject,
getBoarderLoader,
getProjectBoard,
modalToggle, modalToggle,
setProjectBoardFetch, setProjectBoardFetch,
setToggleTab, setToggleTab,
getProjectBoard,
getBoarderLoader,
} from "@redux/projectsTrackerSlice"; } from "@redux/projectsTrackerSlice";
import { apiRequest } from "@api/request";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import project from "assets/icons/trackerProject.svg"; import { apiRequest } from "@api/request";
import watch from "assets/icons/watch.svg";
import file from "assets/icons/fileModal.svg"; import { getCorrectDate } from "@components/Calendar/calendarHelper";
import send from "assets/icons/send.svg"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import arrow2 from "assets/icons/arrows/arrowStart.png"; import { Footer } from "@components/Common/Footer/Footer";
import plus from "assets/icons/plus.svg"; import { Loader } from "@components/Common/Loader/Loader";
import tasks from "assets/icons/trackerTasks.svg"; import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import archive from "assets/icons/archiveTracker.svg"; import { Navigation } from "@components/Navigation/Navigation";
import selectArrow from "assets/icons/arrows/select.svg"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import arrow from "assets/icons/arrows/arrowCalendar.png"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import link from "assets/icons/link.svg";
import archive2 from "assets/icons/archive.svg"; import archive2 from "assets/icons/archive.svg";
import archive from "assets/icons/archiveTracker.svg";
import arrow from "assets/icons/arrows/arrowCalendar.png";
import arrow2 from "assets/icons/arrows/arrowStart.png";
import selectArrow from "assets/icons/arrows/select.svg";
import close from "assets/icons/closeProjectPersons.svg";
import del from "assets/icons/delete.svg"; import del from "assets/icons/delete.svg";
import edit from "assets/icons/edit.svg"; import edit from "assets/icons/edit.svg";
import close from "assets/icons/closeProjectPersons.svg"; import file from "assets/icons/fileModal.svg";
import link from "assets/icons/link.svg";
import plus from "assets/icons/plus.svg";
import send from "assets/icons/send.svg";
import project from "assets/icons/trackerProject.svg";
import tasks from "assets/icons/trackerTasks.svg";
import watch from "assets/icons/watch.svg";
import "./ticketFullScreen.scss"; import "./ticketFullScreen.scss";
export const TicketFullScreen = ({}) => { export const TicketFullScreen = () => {
const [modalAddWorker, setModalAddWorker] = useState(false); const [modalAddWorker, setModalAddWorker] = useState(false);
const ticketId = useParams(); const ticketId = useParams();
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -91,7 +93,7 @@ export const TicketFullScreen = ({}) => {
task_id: ticketId.id, task_id: ticketId.id,
status: 0, status: 0,
}, },
}).then((res) => { }).then(() => {
navigate(`/tracker/project/${taskInfo.project_id}`); navigate(`/tracker/project/${taskInfo.project_id}`);
}); });
} }
@ -104,7 +106,7 @@ export const TicketFullScreen = ({}) => {
title: inputsValue.title, title: inputsValue.title,
description: inputsValue.description, description: inputsValue.description,
}, },
}).then((res) => {}); }).then(() => {});
} }
function createComment() { function createComment() {
@ -135,7 +137,7 @@ export const TicketFullScreen = ({}) => {
comment_id: commentId, comment_id: commentId,
status: 0, status: 0,
}, },
}).then((res) => { }).then(() => {
setComments((prevValue) => setComments((prevValue) =>
prevValue.filter((item) => item.id !== commentId) prevValue.filter((item) => item.id !== commentId)
); );
@ -149,7 +151,7 @@ export const TicketFullScreen = ({}) => {
comment_id: commentId, comment_id: commentId,
text: commentsEditText[commentId], text: commentsEditText[commentId],
}, },
}).then((res) => {}); }).then(() => {});
} }
function deletePerson(userId) { function deletePerson(userId) {
@ -159,7 +161,7 @@ export const TicketFullScreen = ({}) => {
project_id: projectBoard.id, project_id: projectBoard.id,
user_id: userId, user_id: userId,
}, },
}).then((res) => { }).then(() => {
dispatch(deletePersonOnProject(userId)); dispatch(deletePersonOnProject(userId));
}); });
} }

View File

@ -1,21 +1,23 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { apiRequest } from "@api/request";
import { urlForLocal } from "@utils/helper";
import { import {
setColumnName, addPersonToProject,
editColumnName,
editProjectName,
getColumnId,
getColumnName,
getProjectBoard, getProjectBoard,
getValueModalType, getValueModalType,
setColumnName,
setProject, setProject,
setProjectBoardFetch, setProjectBoardFetch,
editProjectName,
editColumnName,
getColumnName,
getColumnId,
addPersonToProject,
} from "@redux/projectsTrackerSlice"; } from "@redux/projectsTrackerSlice";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import arrowDown from "assets/icons/arrows/selectArrow.png"; import arrowDown from "assets/icons/arrows/selectArrow.png";
import "./trackerModal.scss"; import "./trackerModal.scss";
@ -55,7 +57,7 @@ export const TrackerModal = ({
project_id: projectBoard.id, project_id: projectBoard.id,
title: valueColumn, title: valueColumn,
}, },
}).then((res) => { }).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id)); dispatch(setProjectBoardFetch(projectBoard.id));
}); });
setValueColumn(""); setValueColumn("");
@ -78,7 +80,7 @@ export const TrackerModal = ({
column_id: selectedTab, column_id: selectedTab,
priority: priorityTask, priority: priorityTask,
}, },
}).then((res) => { }).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id)); dispatch(setProjectBoardFetch(projectBoard.id));
}); });
@ -94,7 +96,7 @@ export const TrackerModal = ({
project_id: projectId, project_id: projectId,
name: projectName, name: projectName,
}, },
}).then((res) => { }).then(() => {
setActive(false); setActive(false);
dispatch(editProjectName({ id: projectId, name: projectName })); dispatch(editProjectName({ id: projectId, name: projectName }));
}); });
@ -107,7 +109,7 @@ export const TrackerModal = ({
column_id: columnId, column_id: columnId,
title: columnName, title: columnName,
}, },
}).then((res) => { }).then(() => {
setActive(false); setActive(false);
dispatch(editColumnName({ id: columnId, title: columnName })); dispatch(editColumnName({ id: columnId, title: columnName }));
}); });

View File

@ -1,108 +1,110 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { NavLink } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux";
import { useDispatch, useSelector } from "react-redux"; import { NavLink } from "react-router-dom";
import { urlForLocal } from "@utils/helper"; import { getProfileInfo, setProfileInfo } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
import { getProfileInfo, setProfileInfo } from "@redux/outstaffingSlice"; import { urlForLocal } from "@utils/helper";
import avatarMok from "assets/images/avatarMok.png"; import { apiRequest } from "@api/request";
export const Navigation = () => { import avatarMok from "assets/images/avatarMok.png";
const dispatch = useDispatch();
export const Navigation = () => {
const profileInfo = useSelector(getProfileInfo); const dispatch = useDispatch();
const [user] = useState(
localStorage.getItem("role_status") === "18" ? "partner" : "developer" const profileInfo = useSelector(getProfileInfo);
); const [user] = useState(
const [navInfo] = useState({ localStorage.getItem("role_status") === "18" ? "partner" : "developer"
developer: [ );
{ const [navInfo] = useState({
path: "/summary", developer: [
name: "Резюме", {
}, path: "/summary",
{ name: "Резюме",
path: "/calendar", },
name: "Отчетность", {
}, path: "/calendar",
{ name: "Отчетность",
path: "/tracker", },
name: "Трекер", {
}, path: "/tracker",
{ name: "Трекер",
path: "/payouts", },
name: "Выплаты", {
}, path: "/payouts",
{ name: "Выплаты",
path: "/settings", },
name: "Настройки", {
}, path: "/settings",
], name: "Настройки",
partner: [ },
{ ],
path: "/catalog", partner: [
name: "Каталог", {
}, path: "/catalog",
{ name: "Каталог",
path: "/requests", },
name: "Запросы", {
}, path: "/requests",
{ name: "Запросы",
path: "/categories", },
name: "Персонал", {
}, path: "/categories",
{ name: "Персонал",
path: "/tracker", },
name: "Трекер", {
}, path: "/tracker",
{ name: "Трекер",
path: "/treaties", },
name: "Договора", {
}, path: "/treaties",
{ name: "Договора",
path: "/settings", },
name: "Настройки", {
}, path: "/settings",
], name: "Настройки",
}); },
],
useEffect(() => { });
if (localStorage.getItem("role_status") === "18") {
return; useEffect(() => {
} if (localStorage.getItem("role_status") === "18") {
apiRequest(`/profile/${localStorage.getItem("cardId")}`).then( return;
(profileInfo) => dispatch(setProfileInfo(profileInfo)) }
); apiRequest(`/profile/${localStorage.getItem("cardId")}`).then(
}, [dispatch]); (profileInfo) => dispatch(setProfileInfo(profileInfo))
);
return ( }, [dispatch]);
<div className="profileHeader__info">
<div className="profileHeader__container"> return (
<nav className="profileHeader__nav"> <div className="profileHeader__info">
{navInfo[user].map((link, index) => { <div className="profileHeader__container">
return ( <nav className="profileHeader__nav">
<NavLink key={index} end to={`/profile${link.path}`}> {navInfo[user].map((link, index) => {
{link.name} return (
</NavLink> <NavLink key={index} end to={`/profile${link.path}`}>
); {link.name}
})} </NavLink>
</nav> );
})}
<div className="profileHeader__personalInfo"> </nav>
<h3 className="profileHeader__personalInfoName">
{user === "developer" ? profileInfo?.fio : ""} <div className="profileHeader__personalInfo">
</h3> <h3 className="profileHeader__personalInfoName">
<NavLink end to={"/profile"}> {user === "developer" ? profileInfo?.fio : ""}
<img </h3>
src={ <NavLink end to={"/profile"}>
profileInfo.photo ? urlForLocal(profileInfo.photo) : avatarMok <img
} src={
className="profileHeader__personalInfoAvatar" profileInfo.photo ? urlForLocal(profileInfo.photo) : avatarMok
alt="avatar" }
/> className="profileHeader__personalInfoAvatar"
</NavLink> alt="avatar"
</div> />
</div> </NavLink>
</div> </div>
); </div>
}; </div>
);
};

View File

@ -1,18 +1,18 @@
import React from "react"; import React from "react";
import { useSelector, useDispatch } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import {
getPositionId,
selectTags,
setPositionId,
} from "@redux/outstaffingSlice";
import OutstaffingBlock from "@components/OutstaffingBlock/OutstaffingBlock"; import OutstaffingBlock from "@components/OutstaffingBlock/OutstaffingBlock";
import TagSelect from "@components/Select/TagSelect"; import TagSelect from "@components/Select/TagSelect";
import {
selectTags,
getPositionId,
setPositionId,
} from "@redux/outstaffingSlice";
import front from "assets/images/partnerProfile/front-end.webp";
import back from "assets/images/partnerProfile/back-end.webp"; import back from "assets/images/partnerProfile/back-end.webp";
import design from "assets/images/partnerProfile/design.webp"; import design from "assets/images/partnerProfile/design.webp";
import front from "assets/images/partnerProfile/front-end.webp";
import "./outstaffing.scss"; import "./outstaffing.scss";

View File

@ -2,7 +2,8 @@ import React from "react";
import OutsideClickHandler from "react-outside-click-handler"; import OutsideClickHandler from "react-outside-click-handler";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { selectItems, selectedItems, profiles } from "@redux/outstaffingSlice"; import { profiles, selectItems, selectedItems } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import "./outstaffingBlock.scss"; import "./outstaffingBlock.scss";

View File

@ -1,26 +1,28 @@
import moment from "moment";
import "moment/locale/ru";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { Link, Navigate } from "react-router-dom"; import { Link, Navigate } from "react-router-dom";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { getProfileInfo } from "@redux/outstaffingSlice"; import { getProfileInfo } from "@redux/outstaffingSlice";
import { import {
getRequestDates, getRequestDates,
setReportDate, setReportDate,
setRequestDate, setRequestDate,
} from "@redux/reportSlice"; } from "@redux/reportSlice";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { getReports } from "@components/Calendar/calendarHelper"; import { getReports } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileCalendarComponent } from "./ProfileCalendarComponent"; import { ProfileCalendarComponent } from "./ProfileCalendarComponent";
import { Loader } from "@components/Common/Loader/Loader";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import moment from "moment";
import "moment/locale/ru";
import "./profileCalendar.scss"; import "./profileCalendar.scss";
export const ProfileCalendar = () => { export const ProfileCalendar = () => {

View File

@ -1,4 +1,6 @@
import React, { useState, useEffect } from "react"; import moment from "moment";
import "moment/locale/ru";
import React, { useEffect, useState } from "react";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
@ -7,6 +9,8 @@ import {
setRequestDate, setRequestDate,
setSendRequest, setSendRequest,
} from "@redux/reportSlice"; } from "@redux/reportSlice";
import "@components/Calendar/calendarComponent.scss";
import { import {
calendarHelper, calendarHelper,
currentMonthAndDay, currentMonthAndDay,
@ -16,14 +20,10 @@ import {
import ShortReport from "@components/ShortReport/ShortReport"; import ShortReport from "@components/ShortReport/ShortReport";
import arrow from "assets/icons/arrows/arrowCalendar.png"; import arrow from "assets/icons/arrows/arrowCalendar.png";
import rectangle from "assets/images/rectangle__calendar.png";
import calendarIcon from "assets/icons/calendar.svg"; import calendarIcon from "assets/icons/calendar.svg";
import rectangle from "assets/images/rectangle__calendar.png";
import moment from "moment"; // eslint-disable-next-line react/display-name
import "moment/locale/ru";
import "@components/Calendar/calendarComponent.scss";
export const ProfileCalendarComponent = React.memo( export const ProfileCalendarComponent = React.memo(
({ value, setValueHandler, reports, totalHours }) => { ({ value, setValueHandler, reports, totalHours }) => {
const dispatch = useDispatch(); const dispatch = useDispatch();

View File

@ -1,12 +1,14 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useNavigate, NavLink } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { NavLink, useNavigate } from "react-router-dom";
import { Loader } from "@components/Common/Loader/Loader";
import { apiRequest } from "@api/request";
import { auth, setProfileInfo } from "@redux/outstaffingSlice"; import { auth, setProfileInfo } from "@redux/outstaffingSlice";
import { getRole } from "@redux/roleSlice"; import { getRole } from "@redux/roleSlice";
import { apiRequest } from "@api/request";
import { Loader } from "@components/Common/Loader/Loader";
import "./profileHeader.scss"; import "./profileHeader.scss";
export const ProfileHeader = () => { export const ProfileHeader = () => {

View File

@ -2,16 +2,17 @@ import React, { useEffect, useState } from "react";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { apiRequest } from "@api/request";
import { deleteProject, modalToggle } from "@redux/projectsTrackerSlice"; import { deleteProject, modalToggle } from "@redux/projectsTrackerSlice";
import { apiRequest } from "@api/request";
import { ModalSelect } from "@components/Modal/ModalSelect/ModalSelect"; import { ModalSelect } from "@components/Modal/ModalSelect/ModalSelect";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal"; import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import link from "assets/icons/link.svg";
import archiveSet from "assets/icons/archive.svg"; import archiveSet from "assets/icons/archive.svg";
import del from "assets/icons/delete.svg"; import del from "assets/icons/delete.svg";
import edit from "assets/icons/edit.svg"; import edit from "assets/icons/edit.svg";
import link from "assets/icons/link.svg";
import "./projectTiket.scss"; import "./projectTiket.scss";
@ -46,7 +47,7 @@ export const ProjectTiket = ({ project, index }) => {
project_id: project.id, project_id: project.id,
status: 10, status: 10,
}, },
}).then((res) => { }).then(() => {
dispatch(deleteProject(project)); dispatch(deleteProject(project));
}); });
} }

View File

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Route, Redirect } from "react-router-dom"; import { Route } from "react-router-dom";
import { selectAuth } from "@redux/outstaffingSlice"; import { selectAuth } from "@redux/outstaffingSlice";
@ -9,6 +9,7 @@ export const ProtectedRoute = ({ component: Component, ...rest }) => {
const existingToken = localStorage.getItem("auth_token"); const existingToken = localStorage.getItem("auth_token");
const expiresAt = localStorage.getItem("access_token_expired_at"); const expiresAt = localStorage.getItem("access_token_expired_at");
// eslint-disable-next-line no-unused-vars
const isTokenAlive = const isTokenAlive =
!isAuth && !isAuth &&
existingToken && existingToken &&

View File

@ -1,31 +1,33 @@
import React, { useState, useEffect } from "react"; import ru from "date-fns/locale/ru";
import React, { useEffect, useState } from "react";
import DatePicker, { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link, Navigate, useNavigate } from "react-router-dom"; import { Link, Navigate, useNavigate } from "react-router-dom";
import DatePicker, { registerLocale } from "react-datepicker";
import { getReportDate } from "@redux/reportSlice";
import { apiRequest } from "@api/request";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import arrow from "assets/icons/arrows/left-arrow.png";
import calendarIcon from "assets/icons/calendar.svg";
import ellipse from "assets/icons/ellipse.png";
import remove from "assets/icons/remove.svg";
import { import {
getCorrectDate, getCorrectDate,
getCreatedDate, getCreatedDate,
hourOfNum, hourOfNum,
} from "../Calendar/calendarHelper"; } from "../Calendar/calendarHelper";
import ru from "date-fns/locale/ru";
registerLocale("ru", ru);
import { Loader } from "@components/Common/Loader/Loader";
import { Footer } from "@components/Common/Footer/Footer";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { apiRequest } from "@api/request";
import { Navigation } from "@components/Navigation/Navigation";
import { getReportDate } from "@redux/reportSlice";
import calendarIcon from "assets/icons/calendar.svg";
import ellipse from "assets/icons/ellipse.png";
import remove from "assets/icons/remove.svg";
import arrow from "assets/icons/arrows/left-arrow.png";
import "./reportForm.scss"; import "./reportForm.scss";
import "react-datepicker/dist/react-datepicker.css";
registerLocale("ru", ru);
const ReportForm = () => { const ReportForm = () => {
if (localStorage.getItem("role_status") === "18") { if (localStorage.getItem("role_status") === "18") {
@ -101,7 +103,7 @@ const ReportForm = () => {
created_at: getCreatedDate(startDate), created_at: getCreatedDate(startDate),
status: 1, status: 1,
}, },
}).then((res) => { }).then(() => {
setReportSuccess("Отчет отправлен"); setReportSuccess("Отчет отправлен");
setTimeout(() => { setTimeout(() => {
setReportSuccess(""); setReportSuccess("");

View File

@ -1,17 +1,19 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useSelector, useDispatch } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import Select from "react-select"; import Select from "react-select";
import { Loader } from "@components/Common/Loader/Loader";
import { apiRequest } from "@api/request";
import { import {
selectedItems, profiles,
selectItems, selectItems,
selectTags, selectTags,
profiles, selectedItems,
setPositionId, setPositionId,
} from "@redux/outstaffingSlice"; } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
import { Loader } from "@components/Common/Loader/Loader";
import "./tagSelect.scss"; import "./tagSelect.scss";
const TagSelect = () => { const TagSelect = () => {

View File

@ -2,22 +2,24 @@ import React, { useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { apiRequest } from "@api/request";
import {
getCorrectDate,
getCreatedDate,
hourOfNum,
} from "@components/Calendar/calendarHelper";
import { import {
getReportDate, getReportDate,
getSendRequest, getSendRequest,
setSendRequest, setSendRequest,
} from "@redux/reportSlice"; } from "@redux/reportSlice";
import { apiRequest } from "@api/request";
import {
getCorrectDate,
getCreatedDate,
hourOfNum,
} from "@components/Calendar/calendarHelper";
import { Loader } from "@components/Common/Loader/Loader"; import { Loader } from "@components/Common/Loader/Loader";
import "./shortReport.scss"; import "./shortReport.scss";
export const ShortReport = ({}) => { export const ShortReport = () => {
const reportDate = useSelector(getReportDate); const reportDate = useSelector(getReportDate);
const sendReport = useSelector(getSendRequest); const sendReport = useSelector(getSendRequest);

View File

@ -1,14 +1,14 @@
import React, { useState } from "react"; import React, { useState } from "react";
import Slider from "react-slick";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import Slider from "react-slick";
import "slick-carousel/slick/slick-theme.css";
import "slick-carousel/slick/slick.css";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import mockWorker from "assets/images/mock/mokPerson.png"; import mockWorker from "assets/images/mock/mokPerson.png";
import "./sliderWorkers.scss"; import "./sliderWorkers.scss";
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
export const SliderWorkers = ({ title, titleInfo, subTitle }) => { export const SliderWorkers = ({ title, titleInfo, subTitle }) => {
const [workers] = useState([ const [workers] = useState([

View File

@ -1,86 +1,86 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import "./StarRating.scss"; import "./StarRating.scss";
const StarRating = ({ const StarRating = ({
countStars = 1, countStars = 1,
countActiveStars = 1, countActiveStars = 1,
color = "#52B709", color = "#52B709",
size = 61, size = 61,
}) => { }) => {
const [shadedStars, setShadedStars] = useState([]); const [shadedStars, setShadedStars] = useState([]);
const [noShadedStars, setNoShadedStars] = useState([]); const [noShadedStars, setNoShadedStars] = useState([]);
const percent = const percent =
Math.abs(countActiveStars) >= countStars Math.abs(countActiveStars) >= countStars
? 100 ? 100
: (countActiveStars * 100) / countStars; : (countActiveStars * 100) / countStars;
useEffect(() => { useEffect(() => {
for (let index = 0; index < countStars; index++) { for (let index = 0; index < countStars; index++) {
setShadedStars((prev) => [...prev, "★"]); setShadedStars((prev) => [...prev, "★"]);
setNoShadedStars((prev) => [...prev, "☆"]); setNoShadedStars((prev) => [...prev, "☆"]);
} }
}, []); }, []);
const ratingStyle = { const ratingStyle = {
"--size": size + "px", "--size": size + "px",
}; };
const activeStyle = { const activeStyle = {
"--width": percent + "%", "--width": percent + "%",
"--color": color, "--color": color,
"--content": shadedStars.join(""), "--content": shadedStars.join(""),
}; };
const bodyStyle = { const bodyStyle = {
"--content": noShadedStars.join(""), "--content": noShadedStars.join(""),
"--color": color, "--color": color,
}; };
return ( return (
<div className="rating" style={ratingStyle}> <div className="rating" style={ratingStyle}>
<div <div
className="rating__body" className="rating__body"
style={bodyStyle} style={bodyStyle}
data-content={noShadedStars.join("")} data-content={noShadedStars.join("")}
> >
<div <div
className="rating__active" className="rating__active"
style={activeStyle} style={activeStyle}
data-content={shadedStars.join("")} data-content={shadedStars.join("")}
></div> ></div>
<div className="rating__items"> <div className="rating__items">
<input <input
type="radio" type="radio"
className="rating__item" className="rating__item"
value={1} value={1}
name="star" name="star"
></input> ></input>
<input <input
type="radio" type="radio"
className="rating__item" className="rating__item"
value={2} value={2}
name="star" name="star"
></input> ></input>
<input <input
type="radio" type="radio"
className="rating__item" className="rating__item"
value={3} value={3}
name="star" name="star"
></input> ></input>
<input <input
type="radio" type="radio"
className="rating__item" className="rating__item"
value={4} value={4}
name="star" name="star"
></input> ></input>
<input <input
type="radio" type="radio"
className="rating__item" className="rating__item"
value={5} value={5}
name="star" name="star"
></input> ></input>
</div> </div>
</div> </div>
</div> </div>
); );
}; };
export default React.memo(StarRating); export default React.memo(StarRating);

View File

@ -1,16 +1,16 @@
import React from "react"; import React from "react";
import medium_male from "assets/images/medium_male.png"; import medium_male from "assets/images/medium_male.png";
export const HeadBottom = () => { export const HeadBottom = () => {
return ( return (
<div className="bottom-head"> <div className="bottom-head">
<div className="bottom-head__container"> <div className="bottom-head__container">
<div className="bottom-head__title">Мои тесты</div> <div className="bottom-head__title">Мои тесты</div>
<div className="bottom-head__img"> <div className="bottom-head__img">
<img src={medium_male} alt="" /> <img src={medium_male} alt="" />
</div> </div>
</div> </div>
</div> </div>
); );
}; };

View File

@ -1,33 +1,33 @@
import React from "react"; import React from "react";
import suucessIcon from "assets/images/quiz/success.png"; import suucessIcon from "assets/images/quiz/success.png";
export const AlertResult = () => { export const AlertResult = () => {
const successTest = false; const successTest = false;
return ( return (
<div className="alert-result"> <div className="alert-result">
<div className="alert-result__column"> <div className="alert-result__column">
<img <img
src={suucessIcon} src={suucessIcon}
alt="suucessIcon" alt="suucessIcon"
className="alert-result__icon" className="alert-result__icon"
/> />
<div <div
className="alert-result__text" className="alert-result__text"
style={{ color: successTest ? "#52B709" : "#5B6871" }} style={{ color: successTest ? "#52B709" : "#5B6871" }}
> >
Благодарим Вас за прохождение теста "Junior разработчик". Ваши Благодарим Вас за прохождение теста "Junior разработчик". Ваши
результаты проверены, готовы пригласить Вас в команду результаты проверены, готовы пригласить Вас в команду
</div> </div>
</div> </div>
{!successTest && ( {!successTest && (
<div className="alert-result__column"> <div className="alert-result__column">
<button className="alert-result__button quiz-btn"> <button className="alert-result__button quiz-btn">
Запросить еще попытку Запросить еще попытку
</button> </button>
</div> </div>
)} )}
</div> </div>
); );
}; };

View File

@ -1,31 +1,31 @@
import React from "react"; import React from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import compltedImage from "assets/images/quiz/compltedImage.png"; import compltedImage from "assets/images/quiz/compltedImage.png";
export const BlockCompletedTest = () => { export const BlockCompletedTest = () => {
const id = localStorage.getItem("id"); const id = localStorage.getItem("id");
return ( return (
<div className="block-completed-test"> <div className="block-completed-test">
<div className="block-completed-test__container"> <div className="block-completed-test__container">
<div className="block-completed-test__img"> <div className="block-completed-test__img">
<img src={compltedImage} alt="" /> <img src={compltedImage} alt="" />
</div> </div>
<div className="block-completed-test__title"> <div className="block-completed-test__title">
Спасибо! <br /> Спасибо! <br />
Ваши ответы получены Ваши ответы получены
</div> </div>
<div className="block-completed-test__text"> <div className="block-completed-test__text">
В течении дня в вашем кабинете будет отображены данные о прохождении В течении дня в вашем кабинете будет отображены данные о прохождении
тестирования тестирования
</div> </div>
<Link <Link
to={"/profile-candidate/" + id} to={"/profile-candidate/" + id}
className="block-completed-test__button quiz-btn" className="block-completed-test__button quiz-btn"
> >
В кабинет В кабинет
</Link> </Link>
</div> </div>
</div> </div>
); );
}; };

View File

@ -1,19 +1,19 @@
import React from "react"; import React from "react";
import questionIcon from "assets/images/question.png"; import questionIcon from "assets/images/question.png";
import "./quiz.scss"; import "./quiz.scss";
export const CardIntroduction = ({ title, description }) => { export const CardIntroduction = ({ title, description }) => {
return ( return (
<div className="card-introduction"> <div className="card-introduction">
<div className="card-introduction__title">{title}</div> <div className="card-introduction__title">{title}</div>
<div className="card-introduction__body"> <div className="card-introduction__body">
<div className="card-introduction__icon"> <div className="card-introduction__icon">
<img src={questionIcon} alt="" /> <img src={questionIcon} alt="" />
</div> </div>
<div className="card-introduction__text">{description}</div> <div className="card-introduction__text">{description}</div>
</div> </div>
</div> </div>
); );
}; };

View File

@ -1,39 +1,39 @@
import React from "react"; import React from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import StarRating from "@components/StarRating/StarRating"; import StarRating from "@components/StarRating/StarRating";
import rightArrow from "assets/icons/arrows/arrowRight.svg"; import rightArrow from "assets/icons/arrows/arrowRight.svg";
export const CardAvailableTest = ({ title, description, path, passedTest }) => { export const CardAvailableTest = ({ title, description, path, passedTest }) => {
return ( return (
<div className="card-available-test"> <div className="card-available-test">
<Link <Link
to={`/${path}`} to={`/${path}`}
className="card-available-test__container" className="card-available-test__container"
style={{ style={{
opacity: passedTest ? 0.3 : 1, opacity: passedTest ? 0.3 : 1,
pointerEvents: passedTest ? "none" : "all", pointerEvents: passedTest ? "none" : "all",
}} }}
> >
<div className="card-available-test__top-head"> <div className="card-available-test__top-head">
<StarRating /> <StarRating />
<h3 className="card-available-test__title">{title}</h3> <h3 className="card-available-test__title">{title}</h3>
</div> </div>
<div className="card-available-test__info"> <div className="card-available-test__info">
<p dangerouslySetInnerHTML={{ __html: description }}></p> <p dangerouslySetInnerHTML={{ __html: description }}></p>
<div className="card-available-test__infoLink"> <div className="card-available-test__infoLink">
<img src={rightArrow} alt="arrow" /> <img src={rightArrow} alt="arrow" />
</div> </div>
</div> </div>
</Link> </Link>
{passedTest && ( {passedTest && (
<div className="card-available-test__finished"> <div className="card-available-test__finished">
<p>Получить отчет по тестированию</p> <p>Получить отчет по тестированию</p>
<Link to={"/quiz/report"}>Отчет по тесту</Link> <Link to={"/quiz/report"}>Отчет по тесту</Link>
</div> </div>
)} )}
</div> </div>
); );
}; };

View File

@ -1,12 +1,6 @@
import React from "react"; import React from "react";
import { useSelector } from "react-redux";
import { selectedTest } from "@redux/quizSlice";
export const GetOptionTask = ({ type, answer, handleChange, inputValue }) => { export const GetOptionTask = ({ type, answer, handleChange, inputValue }) => {
const id = localStorage.getItem("id");
const dataTest = useSelector(selectedTest);
switch (type) { switch (type) {
case "1": case "1":
return ( return (

View File

@ -1,7 +1,8 @@
import { Link } from "react-router-dom";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link } from "react-router-dom";
import { selectUserInfo, selectedTest } from "@redux/quizSlice";
import { selectedTest, selectUserInfo } from "@redux/quizSlice";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import "./quiz.scss"; import "./quiz.scss";

View File

@ -2,9 +2,10 @@ import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { selectUserInfo, setUserInfo } from "@redux/quizSlice"; import { selectUserInfo, setUserInfo } from "@redux/quizSlice";
import { apiRequest } from "@api/request";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
// import { apiRequest } from "@api/request";
import "./quiz.scss"; import "./quiz.scss";
export const HeaderQuiz = ({ header }) => { export const HeaderQuiz = ({ header }) => {

View File

@ -1,9 +1,10 @@
import { Link } from "react-router-dom";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link } from "react-router-dom";
import { selectedTest } from "@redux/quizSlice";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import { selectedTest } from "@redux/quizSlice";
import comment from "assets/icons/comment.jpg"; import comment from "assets/icons/comment.jpg";

View File

@ -1,7 +1,8 @@
import { Link } from "react-router-dom";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { Link } from "react-router-dom";
import { setSelectedTest } from "@redux/quizSlice"; import { setSelectedTest } from "@redux/quizSlice";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import calendarImage from "assets/icons/calendar.svg"; import calendarImage from "assets/icons/calendar.svg";

View File

@ -1,91 +1,91 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { useTimer } from "react-timer-hook"; import { useTimer } from "react-timer-hook";
import StarRating from "@components/StarRating/StarRating"; import { completedTestSelector } from "@redux/quizSlice";
import { completedTestSelector } from "@redux/quizSlice";
import StarRating from "@components/StarRating/StarRating";
import timer from "assets/images/quiz/timer.png";
import accempt from "assets/images/quiz/accempt.png"; import accempt from "assets/images/quiz/accempt.png";
import timer from "assets/images/quiz/timer.png";
export const QuizPassingInformation = ({ expiryTimestamp, setStartTest }) => {
const { seconds, minutes, isRunning, start, pause, resume, restart } = export const QuizPassingInformation = ({ expiryTimestamp, setStartTest }) => {
useTimer({ const { seconds, minutes, isRunning, start, restart } = useTimer({
expiryTimestamp, expiryTimestamp,
autoStart: false, autoStart: false,
onExpire: () => { onExpire: () => {
console.warn("onExpire called"); console.warn("onExpire called");
}, },
}); });
const completedTest = useSelector(completedTestSelector); const completedTest = useSelector(completedTestSelector);
const startTesting = () => { const startTesting = () => {
setStartTest(true); setStartTest(true);
start(); start();
}; };
useEffect(() => { useEffect(() => {
if (completedTest) { if (completedTest) {
const time = new Date(); const time = new Date();
time.setSeconds(time.getSeconds() + 0); //600 - кол-во секунд для прохождения теста time.setSeconds(time.getSeconds() + 0); //600 - кол-во секунд для прохождения теста
restart(time, false); restart(time, false);
} }
}, [completedTest]); }, [completedTest]);
return ( return (
<div className="quiz-passing-information"> <div className="quiz-passing-information">
<div className="quiz-passing-information__container"> <div className="quiz-passing-information__container">
<div className="quiz-passing-information__main"> <div className="quiz-passing-information__main">
<div className="quiz-passing-information__specialization"> <div className="quiz-passing-information__specialization">
<StarRating <StarRating
color={"#52B709"} color={"#52B709"}
countStars={1} countStars={1}
countActiveStars={0.5} countActiveStars={0.5}
size={61} size={61}
/> />
<div className="quiz-passing-information__specialization-title"> <div className="quiz-passing-information__specialization-title">
Junior <br /> Junior <br />
разработчик разработчик
</div> </div>
</div> </div>
<div className="quiz-passing-information__timer timer-quiz"> <div className="quiz-passing-information__timer timer-quiz">
<div className="quiz-passing-information__icon"> <div className="quiz-passing-information__icon">
<img src={timer} alt="" /> <img src={timer} alt="" />
</div> </div>
<div className="quiz-passing-information__text"> <div className="quiz-passing-information__text">
{completedTest ? "Время вышло" : "Время на прохождение теста:"}{" "} {completedTest ? "Время вышло" : "Время на прохождение теста:"}{" "}
<br /> <br />
<span> <span>
{minutes.toString().padStart(2, "0") + {minutes.toString().padStart(2, "0") +
":" + ":" +
seconds.toString().padStart(2, "0")}{" "} seconds.toString().padStart(2, "0")}{" "}
секунд секунд
</span> </span>
</div> </div>
</div> </div>
<div className="quiz-passing-information__attempt"> <div className="quiz-passing-information__attempt">
<div className="quiz-passing-information__icon"> <div className="quiz-passing-information__icon">
<img src={accempt} alt="" /> <img src={accempt} alt="" />
</div> </div>
<div className="quiz-passing-information__text"> <div className="quiz-passing-information__text">
Попыток прохождения: <br /> Попыток прохождения: <br />
<span>1 попытка</span> <span>1 попытка</span>
</div> </div>
</div> </div>
<div> <div>
{!completedTest && !isRunning && ( {!completedTest && !isRunning && (
<button <button
className="quiz-passing-information__button btn-green" className="quiz-passing-information__button btn-green"
onClick={startTesting} onClick={startTesting}
> >
Начать Начать
</button> </button>
)} )}
</div> </div>
</div> </div>
{/* {isRunning && <button className="quiz-passing-information__button quiz-btn" onClick={pause}>Завершить</button>} */} {/* {isRunning && <button className="quiz-passing-information__button quiz-btn" onClick={pause}>Завершить</button>} */}
</div> </div>
</div> </div>
); );
}; };

View File

@ -1,35 +1,35 @@
import React from "react"; import React from "react";
import StarRating from "@components/StarRating/StarRating"; import StarRating from "@components/StarRating/StarRating";
export const QuizReport = () => { export const QuizReport = () => {
return ( return (
<div className="report"> <div className="report">
<div className="report__row"> <div className="report__row">
<div className="report__column"> <div className="report__column">
<StarRating <StarRating
color={"#52B709"} color={"#52B709"}
countStars={1} countStars={1}
countActiveStars={0.5} countActiveStars={0.5}
size={61} size={61}
/> />
<div className="report__job-title"> <div className="report__job-title">
Junior <br /> разработчик Junior <br /> разработчик
</div> </div>
</div> </div>
<div className="report__column"> <div className="report__column">
<div className="report__value">22</div> <div className="report__value">22</div>
<div className="report__text">Правильных ответов</div> <div className="report__text">Правильных ответов</div>
</div> </div>
<div className="report__column"> <div className="report__column">
<div className="report__value report__value_false">02</div> <div className="report__value report__value_false">02</div>
<div className="report__text">Не правильных ответов</div> <div className="report__text">Не правильных ответов</div>
</div> </div>
<div className="report__column"> <div className="report__column">
<div className="report__status-text">Статус:</div> <div className="report__status-text">Статус:</div>
<div className="report__status">Пройдено!</div> <div className="report__status">Пройдено!</div>
</div> </div>
</div> </div>
</div> </div>
); );
}; };

View File

@ -1,35 +1,36 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { fetchResultTest, selectedTest, selectResult } from "@redux/quizSlice"; import { fetchResultTest, selectResult, selectedTest } from "@redux/quizSlice";
import { apiRequest } from "@api/request";
import { apiRequest } from "@api/request";
export const Results = () => {
const result = useSelector(selectResult); export const Results = () => {
const test = useSelector(selectedTest); const result = useSelector(selectResult);
const [maxScore, setMaxScore] = useState(""); const test = useSelector(selectedTest);
const dispatch = useDispatch(); const [maxScore, setMaxScore] = useState("");
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchResultTest(test.uuid)); useEffect(() => {
apiRequest( dispatch(fetchResultTest(test.uuid));
`/user-questionnaire/get-points-number?user_questionnaire_uuid=${test.uuid}` apiRequest(
).then((res) => setMaxScore(res.sum_point)); `/user-questionnaire/get-points-number?user_questionnaire_uuid=${test.uuid}`
}, [apiRequest, dispatch, test]); ).then((res) => setMaxScore(res.sum_point));
}, [apiRequest, dispatch, test]);
return (
<div className={"result _container"}> return (
{!result ? ( <div className={"result _container"}>
<h1 style={{ display: "block" }}>Ожидайте результата...</h1> {!result ? (
) : ( <h1 style={{ display: "block" }}>Ожидайте результата...</h1>
<div className="result__body"> ) : (
<div className="result__text">Благодарим за прохождение теста</div> <div className="result__body">
<div className="result__text"> <div className="result__text">Благодарим за прохождение теста</div>
Ваш Результат: <span className="result__score">{result.score}</span>{" "} <div className="result__text">
из {maxScore}{" "} Ваш Результат: <span className="result__score">{result.score}</span>{" "}
</div> из {maxScore}{" "}
</div> </div>
)} </div>
</div> )}
); </div>
}; );
};

View File

@ -1,29 +1,29 @@
import React from "react"; import React from "react";
import iconSpecialization from "assets/images/partnerProfile/personalBackEnd.svg"; import iconSpecialization from "assets/images/partnerProfile/personalBackEnd.svg";
export const SelectedCategory = ({ setSelectedCategory }) => { export const SelectedCategory = ({ setSelectedCategory }) => {
return ( return (
<div className="selected-category"> <div className="selected-category">
<div className="selected-category__container"> <div className="selected-category__container">
<div className="selected-category__title"> <div className="selected-category__title">
Ваша выбранная <br /> категория Ваша выбранная <br /> категория
</div> </div>
<div className="selected-category__category"> <div className="selected-category__category">
<div className="selected-category__image"> <div className="selected-category__image">
<img src={iconSpecialization} alt="" /> <img src={iconSpecialization} alt="" />
</div> </div>
<div className="selected-category__title-category"> <div className="selected-category__title-category">
Backend <br /> разработчики Backend <br /> разработчики
</div> </div>
</div> </div>
<button <button
onClick={() => setSelectedCategory(true)} onClick={() => setSelectedCategory(true)}
className="selected-category__button" className="selected-category__button"
> >
Заменить специализацию{" "} Заменить специализацию{" "}
</button> </button>
</div> </div>
</div> </div>
); );
}; };

View File

@ -1,29 +1,25 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux";
import { useSelector, useDispatch } from "react-redux";
import { apiRequest } from "@api/request";
import { HeaderQuiz } from "./HeaderQuiz";
import { Progressbar } from "./ProgressbarQuiz";
import { GetOptionTask } from "./GetOptionTask";
import { import {
fetchUserAnswersMany,
fetchUserAnswerOne,
fetchGetAnswers,
answersSelector, answersSelector,
selectedTest, fetchGetAnswers, // fetchUserAnswerOne,
// fetchUserAnswersMany,
questionsSelector, questionsSelector,
setAnswers, selectedTest, // setAnswers,
setCompleteTest, setCompleteTest,
} from "@redux/quizSlice"; } from "@redux/quizSlice";
import { apiRequest } from "@api/request";
import questionIcon from "assets/images/question.png"; import questionIcon from "assets/images/question.png";
import { GetOptionTask } from "./GetOptionTask";
// import { HeaderQuiz } from "./HeaderQuiz";
// import { Progressbar } from "./ProgressbarQuiz";
import "./quiz.scss"; import "./quiz.scss";
export const TaskQuiz = () => { export const TaskQuiz = () => {
const navigate = useNavigate();
const dispatch = useDispatch(); const dispatch = useDispatch();
const answers = useSelector(answersSelector); const answers = useSelector(answersSelector);
@ -42,7 +38,6 @@ export const TaskQuiz = () => {
// .then(json => console.log(json)) // .then(json => console.log(json))
apiRequest(`/question/get-questions?uuid=${dataTest.uuid}`).then( apiRequest(`/question/get-questions?uuid=${dataTest.uuid}`).then(
(response) => { (response) => {
console.log(response);
dispatch(fetchGetAnswers(response[0].id)); dispatch(fetchGetAnswers(response[0].id));
setStripValue(((+index + 1) * 100) / response.length); setStripValue(((+index + 1) * 100) / response.length);
} }

View File

@ -1,4 +1,4 @@
import React, {Component} from "react"; import React, { Component } from "react";
class ErrorBoundary extends Component { class ErrorBoundary extends Component {
state = { state = {
@ -6,7 +6,7 @@ class ErrorBoundary extends Component {
}; };
static getDerivedStateFromError(error) { static getDerivedStateFromError(error) {
return {error}; return { error };
} }
render() { render() {
@ -19,4 +19,4 @@ class ErrorBoundary extends Component {
} }
} }
export default ErrorBoundary export default ErrorBoundary;

View File

@ -1,7 +1,8 @@
import {useDispatch, useSelector} from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import {getRole} from "../redux/roleSlice"; import { useNavigate } from "react-router-dom";
import {useNavigate} from "react-router-dom";
import {auth} from "../redux/outstaffingSlice"; import { auth } from "../redux/outstaffingSlice";
import { getRole } from "../redux/roleSlice";
export const useLogout = () => { export const useLogout = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -11,8 +12,8 @@ export const useLogout = () => {
const logout = () => { const logout = () => {
localStorage.clear(); localStorage.clear();
dispatch(auth(false)); dispatch(auth(false));
navigate(userRole === 'ROLE_DEV' ? '/authdev' : '/auth') navigate(userRole === "ROLE_DEV" ? "/authdev" : "/auth");
}; };
return {logout} return { logout };
}; };

View File

@ -1,14 +1,13 @@
import React from 'react' import React from "react";
import ReactDOM from 'react-dom/client' import ReactDOM from "react-dom/client";
import {store} from './store/store' import { Provider } from "react-redux";
import {Provider} from 'react-redux'
import App from './App'
import './index.css' import App from "./App";
import "./index.css";
import { store } from "./store/store";
ReactDOM.createRoot(document.getElementById("root")) ReactDOM.createRoot(document.getElementById("root")).render(
.render( <Provider store={store}>
<Provider store={store}> <App />
<App/> </Provider>
</Provider>, );
);

View File

@ -1,23 +1,23 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import CardArticle from "@components/CardArticle/CardArticle";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import SideBar from "@components/SideBar/SideBar";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import CardArticle from "@components/CardArticle/CardArticle"; import SideBar from "@components/SideBar/SideBar";
import mockImgArticle from "assets/images/mock/mockImgArticle.png";
import rightArrow from "assets/icons/arrows/left-arrow.png"; import rightArrow from "assets/icons/arrows/left-arrow.png";
import yandexZen from "assets/icons/yandexZen.svg";
import cardCalendar from "assets/icons/cardCalendar.svg"; import cardCalendar from "assets/icons/cardCalendar.svg";
import cardImg1 from "assets/images/mock/cardArticleItem.png"; import yandexZen from "assets/icons/yandexZen.svg";
import cardImg2 from "assets/images/mock/cardArticleItem2.png"; import cardImg2 from "assets/images/mock/cardArticleItem2.png";
import cardImg3 from "assets/images/mock/cardArticleItem3.png"; import cardImg3 from "assets/images/mock/cardArticleItem3.png";
import cardImg1 from "assets/images/mock/cardArticleItem.png";
import mockImgArticle from "assets/images/mock/mockImgArticle.png";
import "./article.scss"; import "./article.scss";
export const Article = ({}) => { export const Article = () => {
const [article] = useState([ const [article] = useState([
{ {
image: cardImg1, image: cardImg1,

View File

@ -3,27 +3,28 @@ import { useDispatch, useSelector } from "react-redux";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { loading, selectIsLoading } from "@redux/loaderSlice"; import { loading, selectIsLoading } from "@redux/loaderSlice";
import { apiRequest } from "@api/request";
import { auth, selectAuth, setUserInfo } from "@redux/outstaffingSlice"; import { auth, selectAuth, setUserInfo } from "@redux/outstaffingSlice";
import { setRole } from "@redux/roleSlice"; import { setRole } from "@redux/roleSlice";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import { apiRequest } from "@api/request";
import SideBar from "@components/SideBar/SideBar";
import CategoriesItem from "@components/CategoriesItem/CategoriesItem"; import CategoriesItem from "@components/CategoriesItem/CategoriesItem";
import StepsForCandidate from "@components/StepsForCandidate/StepsForCandidate"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import SideBar from "@components/SideBar/SideBar";
import StepsForCandidate from "@components/StepsForCandidate/StepsForCandidate";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import FrontendImg from "assets/images/partnerProfile/PersonalFrontend.svg";
import ArchitectureImg from "assets/images/partnerProfile/PersonalArchitecture.svg";
import DesignImg from "assets/images/partnerProfile/PersonalDesign.svg";
import TestImg from "assets/images/partnerProfile/PersonalTesters.svg";
import AdminImg from "assets/images/partnerProfile/PersonalAdmin.svg";
import ManageImg from "assets/images/partnerProfile/PersonalMng.svg";
import CopyImg from "assets/images/partnerProfile/PersonalCopy.svg";
import SmmImg from "assets/images/partnerProfile/PersonalSMM.svg";
import authImg from "assets/images/partnerProfile/authCandidateFormImg.png";
import arrowBtn from "assets/icons/arrows/arrowRight.svg"; import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import AdminImg from "assets/images/partnerProfile/PersonalAdmin.svg";
import ArchitectureImg from "assets/images/partnerProfile/PersonalArchitecture.svg";
import CopyImg from "assets/images/partnerProfile/PersonalCopy.svg";
import DesignImg from "assets/images/partnerProfile/PersonalDesign.svg";
import FrontendImg from "assets/images/partnerProfile/PersonalFrontend.svg";
import ManageImg from "assets/images/partnerProfile/PersonalMng.svg";
import SmmImg from "assets/images/partnerProfile/PersonalSMM.svg";
import TestImg from "assets/images/partnerProfile/PersonalTesters.svg";
import authImg from "assets/images/partnerProfile/authCandidateFormImg.png";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import "./authForCandidate.scss"; import "./authForCandidate.scss";

View File

@ -3,21 +3,22 @@ import { useSelector } from "react-redux";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import { selectAuth } from "@redux/outstaffingSlice"; import { selectAuth } from "@redux/outstaffingSlice";
import { scrollToForm } from "@utils/helper"; import { scrollToForm } from "@utils/helper";
import { AuthBox } from "@components/AuthBox/AuthBox";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import SideBar from "@components/SideBar/SideBar"; import SideBar from "@components/SideBar/SideBar";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import SliderWorkers from "@components/SliderWorkers/SliderWorkers"; import SliderWorkers from "@components/SliderWorkers/SliderWorkers";
import { AuthBox } from "@components/AuthBox/AuthBox";
import arrow from "assets/icons/arrows/arrow__login_page.png";
import medium from "assets/images/medium_male_big.png";
import cross from "assets/images/cross.png";
import text from "assets/images/Body_Text.png";
import arrowBtn from "assets/icons/arrows/arrowRight.svg"; import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import arrow from "assets/icons/arrows/arrow__login_page.png";
import text from "assets/images/Body_Text.png";
import vector from "assets/images/Vector_Smart_Object.png"; import vector from "assets/images/Vector_Smart_Object.png";
import vectorBlack from "assets/images/Vector_Smart_Object_black.png"; import vectorBlack from "assets/images/Vector_Smart_Object_black.png";
import cross from "assets/images/cross.png";
import medium from "assets/images/medium_male_big.png";
import "./authForDevelopers.scss"; import "./authForDevelopers.scss";

View File

@ -3,21 +3,22 @@ import { useSelector } from "react-redux";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import { selectAuth } from "@redux/outstaffingSlice"; import { selectAuth } from "@redux/outstaffingSlice";
import { scrollToForm } from "@utils/helper"; import { scrollToForm } from "@utils/helper";
import { Footer } from "@components/Common/Footer/Footer";
import { AuthBox } from "@components/AuthBox/AuthBox"; import { AuthBox } from "@components/AuthBox/AuthBox";
import SideBar from "@components/SideBar/SideBar";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer";
import SideBar from "@components/SideBar/SideBar";
import SliderWorkers from "@components/SliderWorkers/SliderWorkers"; import SliderWorkers from "@components/SliderWorkers/SliderWorkers";
import arrow from "assets/icons/arrows/arrow__login_page.png";
import authImg from "assets/images/auth_img.png";
import cross from "assets/images/cross.png";
import text from "assets/images/Body_Text.png";
import arrowBtn from "assets/icons/arrows/arrowRight.svg"; import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import arrow from "assets/icons/arrows/arrow__login_page.png";
import text from "assets/images/Body_Text.png";
import vector from "assets/images/Vector_Smart_Object.png"; import vector from "assets/images/Vector_Smart_Object.png";
import vectorBlack from "assets/images/Vector_Smart_Object_black.png"; import vectorBlack from "assets/images/Vector_Smart_Object_black.png";
import authImg from "assets/images/auth_img.png";
import cross from "assets/images/cross.png";
import "./authForPartners.scss"; import "./authForPartners.scss";

View File

@ -1,22 +1,22 @@
import React, { useState } from "react"; import React, { useState } from "react";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import SideBar from "@components/SideBar/SideBar";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import CardArticle from "@components/CardArticle/CardArticle"; import CardArticle from "@components/CardArticle/CardArticle";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import SideBar from "@components/SideBar/SideBar";
import blogArrow from "assets/icons/arrows/blogArrow.svg"; import blogArrow from "assets/icons/arrows/blogArrow.svg";
import cardImg1 from "assets/images/mock/cardArticleItem.png";
import cardImg2 from "assets/images/mock/cardArticleItem2.png"; import cardImg2 from "assets/images/mock/cardArticleItem2.png";
import cardImg3 from "assets/images/mock/cardArticleItem3.png"; import cardImg3 from "assets/images/mock/cardArticleItem3.png";
import cardImg4 from "assets/images/mock/cardArticleItem4.png"; import cardImg4 from "assets/images/mock/cardArticleItem4.png";
import cardImg5 from "assets/images/mock/cardArticleItem5.png"; import cardImg5 from "assets/images/mock/cardArticleItem5.png";
import cardImg6 from "assets/images/mock/cardArticleItem6.png"; import cardImg6 from "assets/images/mock/cardArticleItem6.png";
import cardImg1 from "assets/images/mock/cardArticleItem.png";
import "./blog.scss"; import "./blog.scss";
export const Blog = ({}) => { export const Blog = () => {
const [article] = useState([ const [article] = useState([
{ {
image: cardImg1, image: cardImg1,

View File

@ -1,6 +1,7 @@
import React from "react"; import React from "react";
import { BookkeepingTemplete } from "@components/features/bookkeeping/BookkeepingTemplete/BookkeepingTemplete";
import { BookkeepingContent } from "@components/features/bookkeeping/BookkeepingContent/BookkeepingContent"; import { BookkeepingContent } from "@components/features/bookkeeping/BookkeepingContent/BookkeepingContent";
import { BookkeepingTemplete } from "@components/features/bookkeeping/BookkeepingTemplete/BookkeepingTemplete";
const Bookkeeping = () => { const Bookkeeping = () => {
return ( return (

View File

@ -1,23 +1,25 @@
import React, { useEffect } from "react"; import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { useParams, useNavigate, Navigate } from "react-router-dom";
import SVG from "react-inlinesvg"; import SVG from "react-inlinesvg";
import { useDispatch, useSelector } from "react-redux";
import { Navigate, useNavigate, useParams } from "react-router-dom";
import { LEVELS, SKILLS } from "@utils/constants";
import { import {
currentCandidate, currentCandidate,
selectCurrentCandidate, selectCurrentCandidate,
} from "@redux/outstaffingSlice"; } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
import { LEVELS, SKILLS } from "@utils/constants";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import Form from "@components/Form/Form"; import { apiRequest } from "@api/request";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import Form from "@components/Form/Form";
import { LogoutButton } from "@components/LogoutButton/LogoutButton"; import { LogoutButton } from "@components/LogoutButton/LogoutButton";
import arrow from "assets/icons/arrows/left-arrow.png"; import arrow from "assets/icons/arrows/left-arrow.png";
import rectangle from "assets/images/rectangle_secondPage.png";
import telegramIcon from "assets/icons/telegram-icon.svg"; import telegramIcon from "assets/icons/telegram-icon.svg";
import rectangle from "assets/images/rectangle_secondPage.png";
import "./formPage.scss"; import "./formPage.scss";

View File

@ -1,62 +1,62 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useNavigate, useParams } from "react-router"; import { useNavigate, useParams } from "react-router";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import SideBar from "@components/SideBar/SideBar"; import { Footer } from "@components/Common/Footer/Footer";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer"; import SideBar from "@components/SideBar/SideBar";
import arrowBtn from "assets/icons/arrows/arrowRight.svg"; import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import "./FrequentlyAskedQuestion.scss"; import "./FrequentlyAskedQuestion.scss";
export const FrequentlyAskedQuestion = () => { export const FrequentlyAskedQuestion = () => {
const params = useParams(); const params = useParams();
const navigate = useNavigate(); const navigate = useNavigate();
const [question, setQuestion] = useState({ const [question] = useState({
id: params.id, id: params.id,
title: "Это фриланс-платформа?", title: "Это фриланс-платформа?",
answer: answer:
"Нет, мы работаем только с юридическими лицами и индивидуальными предпринимателями и тщательно проверяем своих партнеров. Партнерами являются агентства, которые специализируются на оказании услуг в формате аутстафф-модели и обладают глубокой экспертизой в разработке и внедрении ИТ-проектов.", "Нет, мы работаем только с юридическими лицами и индивидуальными предпринимателями и тщательно проверяем своих партнеров. Партнерами являются агентства, которые специализируются на оказании услуг в формате аутстафф-модели и обладают глубокой экспертизой в разработке и внедрении ИТ-проектов.",
}); });
useEffect(() => { useEffect(() => {
//тут запрос //тут запрос
}, []); }, []);
return ( return (
<div className="frequently-asked-question"> <div className="frequently-asked-question">
<AuthHeader /> <AuthHeader />
<SideBar /> <SideBar />
<div className="frequently-asked-question__container container"> <div className="frequently-asked-question__container container">
<ProfileBreadcrumbs <ProfileBreadcrumbs
links={[ links={[
{ name: "Главная", link: "/auth" }, { name: "Главная", link: "/auth" },
{ {
name: "FAQ (часто задаваемые вопросы)", name: "FAQ (часто задаваемые вопросы)",
link: "/frequently-asked-questions", link: "/frequently-asked-questions",
}, },
{ {
name: question.title, name: question.title,
link: `/frequently-asked-question/${params.id}`, link: `/frequently-asked-question/${params.id}`,
}, },
]} ]}
/> />
<div className="frequently-asked-question__title">{question.title}</div> <div className="frequently-asked-question__title">{question.title}</div>
<div <div
className="frequently-asked-question__back" className="frequently-asked-question__back"
onClick={() => navigate(-1)} onClick={() => navigate(-1)}
> >
<div className="frequently-asked-question__arrow"> <div className="frequently-asked-question__arrow">
<img src={arrowBtn}></img> <img src={arrowBtn}></img>
</div> </div>
<p>вернуться к списку вопросов</p> <p>вернуться к списку вопросов</p>
</div> </div>
<div className="frequently-asked-question__answer"> <div className="frequently-asked-question__answer">
<p>{question.answer}</p> <p>{question.answer}</p>
</div> </div>
</div> </div>
<Footer /> <Footer />
</div> </div>
); );
}; };

View File

@ -1,117 +1,117 @@
import React from "react"; import React from "react";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { FrequentlyAskedQuestionsItem } from "@components/FrequentlyAskedQuestionsItem/FrequentlyAskedQuestionsItem"; import { FrequentlyAskedQuestionsItem } from "@components/FrequentlyAskedQuestionsItem/FrequentlyAskedQuestionsItem";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import SideBar from "@components/SideBar/SideBar"; import SideBar from "@components/SideBar/SideBar";
import arrow from "assets/images/faq/arrow.svg"; import arrow from "assets/images/faq/arrow.svg";
import "./FrequentlyAskedQuestions.scss"; import "./FrequentlyAskedQuestions.scss";
export const FrequentlyAskedQuestions = () => { export const FrequentlyAskedQuestions = () => {
const rubrics = [ const rubrics = [
{ {
title: "Общие вопросы ", title: "Общие вопросы ",
questions: [ questions: [
{ {
id: 1, id: 1,
title: "Это фриланс-платформа?", title: "Это фриланс-платформа?",
}, },
{ {
id: 2, id: 2,
title: title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?", "Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
}, },
{ {
id: 3, id: 3,
title: "Это фриланс-платформа?", title: "Это фриланс-платформа?",
}, },
{ {
id: 4, id: 4,
title: title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?", "Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
}, },
], ],
}, },
{ {
title: "Поиск специалиста", title: "Поиск специалиста",
questions: [ questions: [
{ {
id: 11, id: 11,
title: "Это фриланс-платформа?", title: "Это фриланс-платформа?",
}, },
{ {
id: 22, id: 22,
title: title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?", "Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
}, },
{ {
id: 33, id: 33,
title: "Это фриланс-платформа?", title: "Это фриланс-платформа?",
}, },
{ {
id: 44, id: 44,
title: title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?", "Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
}, },
], ],
}, },
{ {
title: "Бронирование специалиста", title: "Бронирование специалиста",
questions: [ questions: [
{ {
id: 11, id: 11,
title: "Это фриланс-платформа?", title: "Это фриланс-платформа?",
}, },
], ],
}, },
{ {
title: "Работа с выбранным специалистом", title: "Работа с выбранным специалистом",
questions: [ questions: [
{ {
id: 11, id: 11,
title: title:
"Чем вы отличаетесь от традиционного процесса выбора исполнителя?", "Чем вы отличаетесь от традиционного процесса выбора исполнителя?",
}, },
], ],
}, },
]; ];
return ( return (
<div className="frequently-asked-questions"> <div className="frequently-asked-questions">
<AuthHeader /> <AuthHeader />
<SideBar /> <SideBar />
<div className="frequently-asked-questions__container container"> <div className="frequently-asked-questions__container container">
<ProfileBreadcrumbs <ProfileBreadcrumbs
links={[ links={[
{ name: "Главная", link: "/auth" }, { name: "Главная", link: "/auth" },
{ {
name: "FAQ (часто задаваемые вопросы)", name: "FAQ (часто задаваемые вопросы)",
link: "/frequently-asked-questions", link: "/frequently-asked-questions",
}, },
]} ]}
/> />
<div className="frequently-asked-questions__about"> <div className="frequently-asked-questions__about">
<div className="frequently-asked-questions__title">FAQ</div> <div className="frequently-asked-questions__title">FAQ</div>
<div className="frequently-asked-questions__arrow"> <div className="frequently-asked-questions__arrow">
<img src={arrow} alt="arrow" /> <img src={arrow} alt="arrow" />
</div> </div>
<div className="frequently-asked-questions__description"> <div className="frequently-asked-questions__description">
База знаний, которая дает ответы на популярные вопросы, тем самым База знаний, которая дает ответы на популярные вопросы, тем самым
помогая нашим клиентам разобраться в продукте, сервисе и вариантах помогая нашим клиентам разобраться в продукте, сервисе и вариантах
сотрудничества с нашей компанией. сотрудничества с нашей компанией.
</div> </div>
</div> </div>
<div className="frequently-asked-questions__items"> <div className="frequently-asked-questions__items">
{rubrics.map((rubric, index) => ( {rubrics.map((rubric, index) => (
<FrequentlyAskedQuestionsItem rubric={rubric} key={index} /> <FrequentlyAskedQuestionsItem rubric={rubric} key={index} />
))} ))}
</div> </div>
</div> </div>
<Footer /> <Footer />
</div> </div>
); );
}; };

View File

@ -1,16 +1,17 @@
import React, { useState, useEffect } from "react"; import React, { useEffect, useState } from "react";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { Navigate } from "react-router-dom"; import { Navigate } from "react-router-dom";
import { apiRequest } from "@api/request";
import { profiles, tags } from "@redux/outstaffingSlice"; import { profiles, tags } from "@redux/outstaffingSlice";
import Outstaffing from "@components/Outstaffing/Outstaffing"; import { apiRequest } from "@api/request";
import Description from "@components/Description/Description";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import Description from "@components/Description/Description";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import Outstaffing from "@components/Outstaffing/Outstaffing";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
const Home = () => { const Home = () => {
if (localStorage.getItem("role_status") !== "18") { if (localStorage.getItem("role_status") !== "18") {

View File

@ -2,19 +2,20 @@ import React, { useEffect, useState } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link, Navigate, useNavigate } from "react-router-dom"; import { Link, Navigate, useNavigate } from "react-router-dom";
import { apiRequest } from "@api/request";
import { getPartnerRequestInfo } from "@redux/outstaffingSlice"; import { getPartnerRequestInfo } from "@redux/outstaffingSlice";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { apiRequest } from "@api/request";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import arrowDown from "assets/icons/arrows/selectArrow.png"; import arrowDown from "assets/icons/arrows/selectArrow.png";
import deleteIcon from "assets/icons/close.png";
import processImg from "assets/images/partnerProfile/partnerAddRequestFirstImg.png"; import processImg from "assets/images/partnerProfile/partnerAddRequestFirstImg.png";
import reportImg from "assets/images/partnerProfile/partnerAddRequestSecondImg.png"; import reportImg from "assets/images/partnerProfile/partnerAddRequestSecondImg.png";
import documentsImg from "assets/images/partnerProfile/partnerAddRequestThirdInfo.png"; import documentsImg from "assets/images/partnerProfile/partnerAddRequestThirdInfo.png";
import deleteIcon from "assets/icons/close.png";
import "./partnerAddRequest.scss"; import "./partnerAddRequest.scss";
@ -116,7 +117,7 @@ export const PartnerAddRequest = () => {
return skill.id; return skill.id;
}), }),
}, },
}).then((res) => { }).then(() => {
navigate("/profile/requests"); navigate("/profile/requests");
}); });
} else { } else {
@ -134,7 +135,7 @@ export const PartnerAddRequest = () => {
return skill.id; return skill.id;
}), }),
}, },
}).then((res) => { }).then(() => {
navigate("/profile/requests"); navigate("/profile/requests");
}); });
} }
@ -205,7 +206,7 @@ export const PartnerAddRequest = () => {
{openSpecializationList && {openSpecializationList &&
Boolean(specializationList.length) && ( Boolean(specializationList.length) && (
<div className="form__block__dropDown"> <div className="form__block__dropDown">
{specializationList.map((specialization, index) => { {specializationList.map((specialization) => {
return ( return (
<p <p
key={specialization.id} key={specialization.id}

View File

@ -1,22 +1,25 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Link, Navigate, useNavigate } from "react-router-dom"; import { Link, Navigate, useNavigate } from "react-router-dom";
import { useSelector, useDispatch } from "react-redux";
import { import {
getPartnerRequestId, getPartnerRequestId,
getPartnerRequests, getPartnerRequests,
setPartnerRequestId, setPartnerRequestId,
setPartnerRequestInfo, setPartnerRequestInfo,
} from "@redux/outstaffingSlice"; } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { apiRequest } from "@api/request";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { Loader } from "@components/Common/Loader/Loader"; import { Loader } from "@components/Common/Loader/Loader";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout"; import ModalLayout from "@components/Common/ModalLayout/ModalLayout";
import { getCorrectDate } from "@components/Calendar/calendarHelper"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import arrowSwitchDate from "assets/icons/arrows/arrowViewReport.png"; import arrowSwitchDate from "assets/icons/arrows/arrowViewReport.png";
import backEndImg from "assets/images/QualificationInfo.png"; import backEndImg from "assets/images/QualificationInfo.png";
@ -56,7 +59,7 @@ export const PartnerBid = () => {
request_id: requestId, request_id: requestId,
status: 0, status: 0,
}, },
}).then((res) => { }).then(() => {
navigate("/profile/requests"); navigate("/profile/requests");
}); });
}; };

View File

@ -1,15 +1,16 @@
import React from "react"; import React from "react";
import { Link, Navigate } from "react-router-dom";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link, Navigate } from "react-router-dom";
import { getPartnerEmployees } from "@redux/outstaffingSlice"; import { getPartnerEmployees } from "@redux/outstaffingSlice";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import imgInfo from "assets/images/emplInfo.png";
import rightArrow from "assets/icons/arrows/arrowRight.svg"; import rightArrow from "assets/icons/arrows/arrowRight.svg";
import imgInfo from "assets/images/emplInfo.png";
import "./partnerEmployees.scss"; import "./partnerEmployees.scss";

View File

@ -1,19 +1,21 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Link, Navigate } from "react-router-dom";
import { useDispatch } from "react-redux"; import { useDispatch } from "react-redux";
import { Link, Navigate } from "react-router-dom";
import { import {
setPartnerRequestId, setPartnerRequestId,
setPartnerRequests, setPartnerRequests,
} from "@redux/outstaffingSlice"; } from "@redux/outstaffingSlice";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { SliderWorkers } from "@components/SliderWorkers/SliderWorkers";
import { Loader } from "@components/Common/Loader/Loader";
import { Footer } from "@components/Common/Footer/Footer";
import BaseButton from "@components/Common/BaseButton/BaseButton"; import BaseButton from "@components/Common/BaseButton/BaseButton";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { SliderWorkers } from "@components/SliderWorkers/SliderWorkers";
import cursorImg from "assets/icons/cursorImg.svg"; import cursorImg from "assets/icons/cursorImg.svg";

View File

@ -1,13 +1,13 @@
import React from "react"; import React from "react";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { Navigation } from "@components/Navigation/Navigation";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import kontur from "assets/images/logo/konturLogo.png";
import astral from "assets/images/logo/astralLogo.png"; import astral from "assets/images/logo/astralLogo.png";
import kontur from "assets/images/logo/konturLogo.png";
import "./partnerSettings.scss"; import "./partnerSettings.scss";

View File

@ -1,19 +1,19 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import mainTabImg from "assets/icons/mainTreaties.png";
import actImg from "assets/icons/actTreaties.png"; import actImg from "assets/icons/actTreaties.png";
import checkImg from "assets/icons/checkTreaties.png";
import arrowDown from "assets/icons/arrows/arrowDown.png";
import logoAstral from "assets/images/logo/astralLogo.png";
import arrowItem from "assets/icons/arrows/arrowCheck.png"; import arrowItem from "assets/icons/arrows/arrowCheck.png";
import arrowDown from "assets/icons/arrows/arrowDown.png";
import checkImg from "assets/icons/checkTreaties.png";
import lock from "assets/icons/lock.svg"; import lock from "assets/icons/lock.svg";
import lockDone from "assets/icons/lockDone.svg"; import lockDone from "assets/icons/lockDone.svg";
import mainTabImg from "assets/icons/mainTreaties.png";
import avatarMok from "assets/images/avatarMok.png"; import avatarMok from "assets/images/avatarMok.png";
import logoAstral from "assets/images/logo/astralLogo.png";
import "./partnerTreaties.scss"; import "./partnerTreaties.scss";

View File

@ -1,28 +1,28 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useDispatch } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { Navigate } from "react-router-dom"; import { Navigate } from "react-router-dom";
import { useDispatch } from "react-redux";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { setPartnerEmployees } from "@redux/outstaffingSlice"; import { setPartnerEmployees } from "@redux/outstaffingSlice";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg"; import { Footer } from "@components/Common/Footer/Footer";
import FrontendImg from "assets/images/partnerProfile/PersonalFrontend.svg"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import ArchitectureImg from "assets/images/partnerProfile/PersonalArchitecture.svg"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import DesignImg from "assets/images/partnerProfile/PersonalDesign.svg";
import TestImg from "assets/images/partnerProfile/PersonalTesters.svg";
import AdminImg from "assets/images/partnerProfile/PersonalAdmin.svg";
import ManageImg from "assets/images/partnerProfile/PersonalMng.svg";
import CopyImg from "assets/images/partnerProfile/PersonalCopy.svg";
import SmmImg from "assets/images/partnerProfile/PersonalSMM.svg";
import rightArrow from "assets/icons/arrows/arrowRight.svg"; import rightArrow from "assets/icons/arrows/arrowRight.svg";
import avatarImg from "assets/images/avatarMok.png"; import avatarImg from "assets/images/avatarMok.png";
import AdminImg from "assets/images/partnerProfile/PersonalAdmin.svg";
import ArchitectureImg from "assets/images/partnerProfile/PersonalArchitecture.svg";
import CopyImg from "assets/images/partnerProfile/PersonalCopy.svg";
import DesignImg from "assets/images/partnerProfile/PersonalDesign.svg";
import FrontendImg from "assets/images/partnerProfile/PersonalFrontend.svg";
import ManageImg from "assets/images/partnerProfile/PersonalMng.svg";
import SmmImg from "assets/images/partnerProfile/PersonalSMM.svg";
import TestImg from "assets/images/partnerProfile/PersonalTesters.svg";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import "./partnerСategories.scss";
import { Navigation } from "../../components/Navigation/Navigation"; import { Navigation } from "../../components/Navigation/Navigation";
import "./partnerСategories.scss";
export const PartnerCategories = () => { export const PartnerCategories = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();

View File

@ -1,7 +1,7 @@
import React from "react"; import React from "react";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
export const Payouts = () => { export const Payouts = () => {
return ( return (

View File

@ -2,20 +2,21 @@ import React, { useState } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { getProfileInfo } from "@redux/outstaffingSlice"; import { getProfileInfo } from "@redux/outstaffingSlice";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { CardControl } from "@components/CardControl/CardControl"; import { CardControl } from "@components/CardControl/CardControl";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import reportsIcon from "assets/images/reports.png";
import summaryIcon from "assets/icons/summaryIcon.png";
import timerIcon from "assets/icons/timerIcon.png";
import paymentIcon from "assets/icons/paymentIcon.png"; import paymentIcon from "assets/icons/paymentIcon.png";
import settingIcon from "assets/icons/settingIcon.png"; import settingIcon from "assets/icons/settingIcon.png";
import summaryIcon from "assets/icons/summaryIcon.png";
import timerIcon from "assets/icons/timerIcon.png";
import avatarMok from "assets/images/avatarMok.png"; import avatarMok from "assets/images/avatarMok.png";
import reportsIcon from "assets/images/reports.png";
import "./profile.scss"; import "./profile.scss";

View File

@ -1,108 +1,108 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { CardControl } from "@components/CardControl/CardControl";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { Footer } from "@components/Common/Footer/Footer";
import { CardControl } from "@components/CardControl/CardControl"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom"; import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom";
import settingIcon from "assets/icons/settingIcon.png"; import settingIcon from "assets/icons/settingIcon.png";
import reportsIcon from "assets/images/reports.png"; import medium_male from "assets/images/medium_male.png";
import noteIcon from "assets/images/note.png"; import noteIcon from "assets/images/note.png";
import questionIcon from "assets/images/question.png"; import questionIcon from "assets/images/question.png";
import medium_male from "assets/images/medium_male.png"; import reportsIcon from "assets/images/reports.png";
import "./ProfileCandidate.scss"; import "./ProfileCandidate.scss";
export const ProfileCandidate = () => { export const ProfileCandidate = () => {
const [candidatsCardsControl] = useState([ const [candidatsCardsControl] = useState([
{ {
path: "quiz", path: "quiz",
img: reportsIcon, img: reportsIcon,
title: "Мои тесты", title: "Мои тесты",
description: "<span>У вас 122 часа<br/></span>отработанных в этом месяце", description: "<span>У вас 122 часа<br/></span>отработанных в этом месяце",
}, },
{ {
path: "profile/settings", path: "profile/settings",
img: settingIcon, img: settingIcon,
title: "Настройки аккаунта", title: "Настройки аккаунта",
description: "Перейдите чтобы начать редактирование", description: "Перейдите чтобы начать редактирование",
}, },
]); ]);
return ( return (
<div className="profile-candidate"> <div className="profile-candidate">
<ProfileHeader /> <ProfileHeader />
<div className="profile-candidate__head-bottom bottom-head"> <div className="profile-candidate__head-bottom bottom-head">
<HeadBottom /> <HeadBottom />
</div> </div>
<div className="profile-candidate__container"> <div className="profile-candidate__container">
<ProfileBreadcrumbs <ProfileBreadcrumbs
links={[{ name: "Главная", link: "/profile-candidate" }]} links={[{ name: "Главная", link: "/profile-candidate" }]}
/> />
<div className="profile-candidate__title main-title"> <div className="profile-candidate__title main-title">
Добрый день, <span>Дмитрий</span> Добрый день, <span>Дмитрий</span>
</div> </div>
<div className="profile-candidate__row"> <div className="profile-candidate__row">
<div className="profile-candidate__tests"> <div className="profile-candidate__tests">
<div className="info-candidate"> <div className="info-candidate">
<div className="info-candidate__img"> <div className="info-candidate__img">
<img src={medium_male} alt="" /> <img src={medium_male} alt="" />
</div> </div>
<div className="info-candidate__info"> <div className="info-candidate__info">
<div className="info-candidate__title"> <div className="info-candidate__title">
Открыто {3} теста из {12} Открыто {3} теста из {12}
</div> </div>
<div className="info-candidate__decor"></div> <div className="info-candidate__decor"></div>
</div> </div>
</div> </div>
<div className="profile-candidate__cards"> <div className="profile-candidate__cards">
{candidatsCardsControl.map((item, index) => ( {candidatsCardsControl.map((item, index) => (
<CardControl <CardControl
description={item.description} description={item.description}
img={item.img} img={item.img}
path={item.path} path={item.path}
title={item.title} title={item.title}
key={index} key={index}
/> />
))} ))}
</div> </div>
</div> </div>
<div className="profile-candidate__instructions instructions-candidate"> <div className="profile-candidate__instructions instructions-candidate">
<div className="instructions-candidate__container"> <div className="instructions-candidate__container">
<div className="instructions-candidate___row"> <div className="instructions-candidate___row">
<div className="instructions-candidate__title">Интсрукция:</div> <div className="instructions-candidate__title">Интсрукция:</div>
<div className="instructions-candidate__note"> <div className="instructions-candidate__note">
<img <img
className="instructions-candidate__icon" className="instructions-candidate__icon"
src={noteIcon} src={noteIcon}
alt="" alt=""
/> />
<div className="instructions-candidate__text"> <div className="instructions-candidate__text">
Для подтверждения своих знаний - пройдите тестирование во Для подтверждения своих знаний - пройдите тестирование во
вкладке вкладке
<span>Мои тесты</span> <span>Мои тесты</span>
</div> </div>
</div> </div>
</div> </div>
<div className="instructions-candidate___row"> <div className="instructions-candidate___row">
<div className="instructions-candidate__title">Зачем?</div> <div className="instructions-candidate__title">Зачем?</div>
<div className="instructions-candidate__note"> <div className="instructions-candidate__note">
<img <img
className="instructions-candidate__icon" className="instructions-candidate__icon"
src={questionIcon} src={questionIcon}
alt="" alt=""
/> />
<div className="instructions-candidate__text"> <div className="instructions-candidate__text">
Тесты itguild предназначены для того, чтобы подтверждать Тесты itguild предназначены для того, чтобы подтверждать
навыки, которые вы указали у себя. навыки, которые вы указали у себя.
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<Footer /> <Footer />
</div> </div>
); );
}; };

View File

@ -1,40 +1,42 @@
import React, { useEffect, useRef, useState } from "react"; import React, { useEffect, useRef, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Link, useParams } from "react-router-dom"; import { Link, useParams } from "react-router-dom";
import { urlForLocal } from "@utils/helper";
import { useDispatch, useSelector } from "react-redux";
import { apiRequest } from "@api/request";
import { import {
getProjectBoard, activeLoader,
deletePersonOnProject,
getBoarderLoader, getBoarderLoader,
getProjectBoard,
modalToggle, modalToggle,
moveProjectTask, moveProjectTask,
setColumnId,
setColumnName,
setProjectBoardFetch, setProjectBoardFetch,
setToggleTab, setToggleTab,
activeLoader,
setColumnName,
setColumnId,
deletePersonOnProject,
} from "@redux/projectsTrackerSlice"; } from "@redux/projectsTrackerSlice";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { urlForLocal } from "@utils/helper";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { apiRequest } from "@api/request";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { Loader } from "@components/Common/Loader/Loader"; import { Loader } from "@components/Common/Loader/Loader";
import ModalTicket from "@components/Modal/Tracker/ModalTicket/ModalTicket"; import ModalTicket from "@components/Modal/Tracker/ModalTicket/ModalTicket";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal"; import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import project from "assets/icons/trackerProject.svg";
import tasks from "assets/icons/trackerTasks.svg";
import archive from "assets/icons/archiveTracker.svg"; import archive from "assets/icons/archiveTracker.svg";
import selectArrow from "assets/icons/arrows/select.svg";
import commentsBoard from "assets/icons/commentsBoard.svg";
import filesBoard from "assets/icons/filesBoard.svg";
import arrow from "assets/icons/arrows/arrowCalendar.png"; import arrow from "assets/icons/arrows/arrowCalendar.png";
import selectArrow from "assets/icons/arrows/select.svg";
import close from "assets/icons/closeProjectPersons.svg";
import commentsBoard from "assets/icons/commentsBoard.svg";
import del from "assets/icons/delete.svg"; import del from "assets/icons/delete.svg";
import edit from "assets/icons/edit.svg"; import edit from "assets/icons/edit.svg";
import close from "assets/icons/closeProjectPersons.svg"; import filesBoard from "assets/icons/filesBoard.svg";
import project from "assets/icons/trackerProject.svg";
import tasks from "assets/icons/trackerTasks.svg";
export const ProjectTracker = () => { export const ProjectTracker = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -150,7 +152,7 @@ export const ProjectTracker = () => {
project_id: projectBoard.id, project_id: projectBoard.id,
status: 0, status: 0,
}, },
}).then((res) => { }).then(() => {
dispatch(setProjectBoardFetch(projectBoard.id)); dispatch(setProjectBoardFetch(projectBoard.id));
}); });
} }
@ -162,7 +164,7 @@ export const ProjectTracker = () => {
project_id: projectBoard.id, project_id: projectBoard.id,
user_id: userId, user_id: userId,
}, },
}).then((res) => { }).then(() => {
dispatch(deletePersonOnProject(userId)); dispatch(deletePersonOnProject(userId));
}); });
} }
@ -336,7 +338,7 @@ export const ProjectTracker = () => {
<div <div
key={column.id} key={column.id}
onDragOver={(e) => dragOverHandler(e)} onDragOver={(e) => dragOverHandler(e)}
onDragEnter={(e) => dragEnterHandler(column.id)} onDragEnter={() => dragEnterHandler(column.id)}
onDrop={(e) => dragDropHandler(e, column.id)} onDrop={(e) => dragDropHandler(e, column.id)}
className={`tasks__board ${ className={`tasks__board ${
column.tasks.length >= 3 ? "tasks__board__more" : "" column.tasks.length >= 3 ? "tasks__board__more" : ""
@ -396,7 +398,7 @@ export const ProjectTracker = () => {
</div> </div>
</div> </div>
)} )}
{column.tasks.map((task, index) => { {column.tasks.map((task) => {
// if (index > 2) { // if (index > 2) {
// if (!column.open) { // if (!column.open) {
// return; // return;
@ -452,7 +454,7 @@ export const ProjectTracker = () => {
); );
})} })}
{Boolean(projectBoard?.columns) && {Boolean(projectBoard?.columns) &&
!Boolean(projectBoard.columns.length) && ( !projectBoard.columns.length && (
<div className="tasks__board__noItems"> <div className="tasks__board__noItems">
В проекте нет задач. В проекте нет задач.
</div> </div>

View File

@ -1,12 +1,12 @@
import React from "react"; import React from "react";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader"; import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer";
import SideBar from "@components/SideBar/SideBar"; import SideBar from "@components/SideBar/SideBar";
import StepsForCandidate from "@components/StepsForCandidate/StepsForCandidate"; import StepsForCandidate from "@components/StepsForCandidate/StepsForCandidate";
import { Footer } from "@components/Common/Footer/Footer";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import arrowBtn from "assets/icons/arrows/arrowRight.svg"; import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import "./registationForCandidate.scss"; import "./registationForCandidate.scss";

View File

@ -1,12 +1,12 @@
import React from "react"; import React from "react";
import { useNavigate } from "react-router";
import SVG from "react-inlinesvg"; import SVG from "react-inlinesvg";
import { useNavigate } from "react-router";
import { TaskItem } from "@components/TaskItem/TaskItem";
import { LogoutButton } from "@components/LogoutButton/LogoutButton"; import { LogoutButton } from "@components/LogoutButton/LogoutButton";
import { TaskItem } from "@components/TaskItem/TaskItem";
import arrowLeft from "assets/icons/arrows/left-arrow.png";
import dateArrowIcon from "assets/icons/arrows/dateArrow.svg"; import dateArrowIcon from "assets/icons/arrows/dateArrow.svg";
import arrowLeft from "assets/icons/arrows/left-arrow.png";
import calendarIcon from "assets/icons/calendar.svg"; import calendarIcon from "assets/icons/calendar.svg";
import "./singleReportPage.scss"; import "./singleReportPage.scss";
@ -66,9 +66,9 @@ const SingleReportPage = () => {
<div className="single-report-page__marker"></div> <div className="single-report-page__marker"></div>
<h3>Какие задачи были выполнены?</h3> <h3>Какие задачи были выполнены?</h3>
</div> </div>
{tasks.map((task) => { {tasks.map((task, index) => {
return ( return (
<div className="single-report-page__tasks-item"> <div className="single-report-page__tasks-item" key={index}>
<TaskItem {...task} /> <TaskItem {...task} />
</div> </div>
); );

View File

@ -2,17 +2,19 @@ import React, { useEffect, useState } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Navigate } from "react-router-dom"; import { Navigate } from "react-router-dom";
import { apiRequest } from "@api/request";
import { urlForLocal } from "@utils/helper";
import { getProfileInfo } from "@redux/outstaffingSlice"; import { getProfileInfo } from "@redux/outstaffingSlice";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { urlForLocal } from "@utils/helper";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { apiRequest } from "@api/request";
import { Footer } from "@components/Common/Footer/Footer"; import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation"; import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import arrow from "assets/icons/arrows/left-arrow.png";
import rightArrow from "assets/icons/arrows/arrowRight.svg"; import rightArrow from "assets/icons/arrows/arrowRight.svg";
import arrow from "assets/icons/arrows/left-arrow.png";
import gitImgItem from "assets/icons/gitItemImg.svg"; import gitImgItem from "assets/icons/gitItemImg.svg";
import "./summary.scss"; import "./summary.scss";

View File

@ -2,28 +2,30 @@ import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { import {
setAllProjects,
getProjects, getProjects,
setToggleTab,
getToggleTab, getToggleTab,
modalToggle, modalToggle,
setAllProjects,
setToggleTab,
} from "@redux/projectsTrackerSlice"; } from "@redux/projectsTrackerSlice";
import { urlForLocal } from "@utils/helper"; import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import ProjectTiket from "@components/ProjectTiket/ProjectTiket";
import { getCorrectDate } from "@components/Calendar/calendarHelper"; import { getCorrectDate } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader"; import { Loader } from "@components/Common/Loader/Loader";
import TrackerModal from "@components/Modal/TrackerModal/TrackerModal";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import ProjectTiket from "@components/ProjectTiket/ProjectTiket";
import project from "assets/icons/trackerProject.svg";
import tasks from "assets/icons/trackerTasks.svg";
import archive from "assets/icons/archiveTracker.svg"; import archive from "assets/icons/archiveTracker.svg";
import search from "assets/icons/serchIcon.png"; import search from "assets/icons/serchIcon.png";
import project from "assets/icons/trackerProject.svg";
import tasks from "assets/icons/trackerTasks.svg";
import noProjects from "assets/images/noProjects.png"; import noProjects from "assets/images/noProjects.png";
import "./tracker.scss"; import "./tracker.scss";

View File

@ -1,21 +1,21 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Link, Navigate, useParams } from "react-router-dom"; import { Link, Navigate, useParams } from "react-router-dom";
import { Loader } from "@components/Common/Loader/Loader";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import { import {
getCorrectDate, getCorrectDate,
getCreatedDate, getCreatedDate,
hourOfNum, hourOfNum,
} from "@components/Calendar/calendarHelper"; } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import arrow from "assets/icons/arrows/left-arrow.png";
import arrowSwitchDate from "assets/icons/arrows/arrowViewReport.png"; import arrowSwitchDate from "assets/icons/arrows/arrowViewReport.png";
import arrow from "assets/icons/arrows/left-arrow.png";
import "./viewReport.scss"; import "./viewReport.scss";

View File

@ -1,107 +1,103 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { completedTestSelector, selectedTest } from "@redux/quizSlice";
import { completedTestSelector } from "@redux/quizSlice";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom"; import { Footer } from "@components/Common/Footer/Footer";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { Footer } from "@components/Common/Footer/Footer"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { QuizPassingInformation } from "@components/features/quiz/Quiz-passing-information"; import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom";
import { CardIntroduction } from "@components/features/quiz/Card-introduction"; import { BlockCompletedTest } from "@components/features/quiz/BlockCompletedTest";
import { TaskQuiz } from "@components/features/quiz/Task"; import { CardIntroduction } from "@components/features/quiz/Card-introduction";
import { BlockCompletedTest } from "@components/features/quiz/BlockCompletedTest"; import { QuizPassingInformation } from "@components/features/quiz/Quiz-passing-information";
import { TaskQuiz } from "@components/features/quiz/Task";
export const PassingTests = () => {
//const selectedTest = useSelector(selectedTest) export const PassingTests = () => {
const time = new Date();
if ("") { time.setSeconds(time.getSeconds() + 600); //600 - кол-во секунд для прохождения теста
}
const [startTest, setStartTest] = useState(false);
const time = new Date(); const completedTest = useSelector(completedTestSelector);
time.setSeconds(time.getSeconds() + 600); //600 - кол-во секунд для прохождения теста
const introduction = [
const [startTest, setStartTest] = useState(false); {
const completedTest = useSelector(completedTestSelector); title: "Зачем?",
description:
const introduction = [ "Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.",
{ },
title: "Зачем?", {
description: title: "Почему именно тестирование?",
"Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.", description:
}, "Тесты itguild заменяют первое техническое собеседование по любой вакансии.",
{ },
title: "Почему именно тестирование?", {
description: title: "Какие тесты нужно проходить?",
"Тесты itguild заменяют первое техническое собеседование по любой вакансии.", description:
}, "Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.",
{ },
title: "Какие тесты нужно проходить?", ];
description:
"Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.", return (
}, <div className="passing-tests-page">
]; <ProfileHeader />
<HeadBottom />
return ( <div className="passing-tests-page__container">
<div className="passing-tests-page"> <ProfileBreadcrumbs
<ProfileHeader /> links={[
<HeadBottom /> { name: "Главная", link: "/profile-candidate" },
<div className="passing-tests-page__container"> { name: "Тестирование", link: "/quiz" },
<ProfileBreadcrumbs { name: "Прохождение тестов", link: "/quiz/test" },
links={[ ]}
{ name: "Главная", link: "/profile-candidate" }, />
{ name: "Тестирование", link: "/quiz" }, <div className="passing-tests-page__title main-title">
{ name: "Прохождение тестов", link: "/quiz/test" }, Тестирование в позиции Junior разработчик{" "}
]} </div>
/> <div className="passing-tests-page__passing-information">
<div className="passing-tests-page__title main-title"> <QuizPassingInformation
Тестирование в позиции Junior разработчик{" "} expiryTimestamp={time}
</div> setStartTest={setStartTest}
<div className="passing-tests-page__passing-information"> />
<QuizPassingInformation </div>
expiryTimestamp={time}
setStartTest={setStartTest} {!completedTest && (
/> <>
</div> {startTest && (
<div className="passing-tests-page__block-green">
{!completedTest && ( Тестирование началось
<> </div>
{startTest && ( )}
<div className="passing-tests-page__block-green"> {startTest ? (
Тестирование началось <TaskQuiz />
</div> ) : (
)} <div className="passing-tests-page__introduction">
{startTest ? ( {introduction.map((item, i) => (
<TaskQuiz /> <CardIntroduction
) : ( description={item.description}
<div className="passing-tests-page__introduction"> title={item.title}
{introduction.map((item, i) => ( key={i}
<CardIntroduction />
description={item.description} ))}
title={item.title} </div>
key={i} )}
/> {!startTest && (
))} <div className="passing-tests-page__block-text block-text">
</div> ИЛИ <Link to={""}>выполните тестове задание</Link> , без
)} прохождения тестов
{!startTest && ( </div>
<div className="passing-tests-page__block-text block-text"> )}
ИЛИ <Link to={""}>выполните тестове задание</Link> , без </>
прохождения тестов )}
</div> {completedTest && (
)} <>
</> <div className="passing-tests-page__block-green">
)} Тестирование завершено
{completedTest && ( </div>
<> <BlockCompletedTest />
<div className="passing-tests-page__block-green"> </>
Тестирование завершено )}
</div> </div>
<BlockCompletedTest /> <Footer />
</> </div>
)} );
</div> };
<Footer />
</div>
);
};

View File

@ -1,26 +1,28 @@
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { questionnairesSelector, setQuestionnaires } from "@redux/quizSlice"; import { questionnairesSelector, setQuestionnaires } from "@redux/quizSlice";
import { apiRequest } from "@api/request"; import { apiRequest } from "@api/request";
import CategoriesItem from "@components/CategoriesItem/CategoriesItem";
import { Footer } from "@components/Common/Footer/Footer";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom"; import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { SelectedCategory } from "@components/features/quiz/SelectedCategory";
import { Footer } from "@components/Common/Footer/Footer";
import { CardAvailableTest } from "@components/features/quiz/CardAviableTest"; import { CardAvailableTest } from "@components/features/quiz/CardAviableTest";
import CategoriesItem from "@components/CategoriesItem/CategoriesItem"; import { SelectedCategory } from "@components/features/quiz/SelectedCategory";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import FrontendImg from "assets/images/partnerProfile/PersonalFrontend.svg";
import ArchitectureImg from "assets/images/partnerProfile/PersonalArchitecture.svg";
import DesignImg from "assets/images/partnerProfile/PersonalDesign.svg";
import TestImg from "assets/images/partnerProfile/PersonalTesters.svg";
import AdminImg from "assets/images/partnerProfile/PersonalAdmin.svg"; import AdminImg from "assets/images/partnerProfile/PersonalAdmin.svg";
import ManageImg from "assets/images/partnerProfile/PersonalMng.svg"; import ArchitectureImg from "assets/images/partnerProfile/PersonalArchitecture.svg";
import CopyImg from "assets/images/partnerProfile/PersonalCopy.svg"; import CopyImg from "assets/images/partnerProfile/PersonalCopy.svg";
import DesignImg from "assets/images/partnerProfile/PersonalDesign.svg";
import FrontendImg from "assets/images/partnerProfile/PersonalFrontend.svg";
import ManageImg from "assets/images/partnerProfile/PersonalMng.svg";
import SmmImg from "assets/images/partnerProfile/PersonalSMM.svg"; import SmmImg from "assets/images/partnerProfile/PersonalSMM.svg";
import TestImg from "assets/images/partnerProfile/PersonalTesters.svg";
import BackEndImg from "assets/images/partnerProfile/personalBackEnd.svg";
import "./quiz-page.scss"; import "./quiz-page.scss";

View File

@ -1,46 +1,46 @@
import React from "react"; import React from "react";
import { useNavigate } from "react-router-dom"; import { useSelector } from "react-redux";
import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom";
import { selectedTest } from "@redux/quizSlice"; import { selectedTest } from "@redux/quizSlice";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader"; import { Footer } from "@components/Common/Footer/Footer";
import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom"; import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs"; import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { QuizReport } from "@components/features/quiz/QuizReport"; import { HeadBottom } from "@components/features/Candidate-lk/HeadBottom";
import { Footer } from "@components/Common/Footer/Footer"; import { AlertResult } from "@components/features/quiz/AlertResult";
import { AlertResult } from "@components/features/quiz/AlertResult"; import { QuizReport } from "@components/features/quiz/QuizReport";
export const QuizReportPage = () => { export const QuizReportPage = () => {
const test = useSelector(selectedTest); const test = useSelector(selectedTest);
let navigate = useNavigate(); let navigate = useNavigate();
if (!test) { if (!test) {
navigate("/quiz"); navigate("/quiz");
} }
return ( return (
<div className="quiz-report-page"> <div className="quiz-report-page">
<ProfileHeader /> <ProfileHeader />
<HeadBottom /> <HeadBottom />
<div className="quiz-report-page__container"> <div className="quiz-report-page__container">
<ProfileBreadcrumbs <ProfileBreadcrumbs
links={[ links={[
{ name: "Главная", link: "/profile-candidate" }, { name: "Главная", link: "/profile-candidate" },
{ name: "Тестирование", link: "/quiz" }, { name: "Тестирование", link: "/quiz" },
{ name: "Отчет по тестированию", link: "/quiz/report" }, { name: "Отчет по тестированию", link: "/quiz/report" },
]} ]}
/> />
<div className="quiz-report-page__title main-title"> <div className="quiz-report-page__title main-title">
Отчет по тестированию позиции Junior разработчик{" "} Отчет по тестированию позиции Junior разработчик{" "}
</div> </div>
<div className="quiz-report-page__report-quiz"> <div className="quiz-report-page__report-quiz">
<QuizReport /> <QuizReport />
</div> </div>
<AlertResult /> <AlertResult />
</div> </div>
<Footer /> <Footer />
</div> </div>
); );
}; };

View File

@ -1,11 +1,11 @@
import { createSlice } from '@reduxjs/toolkit'; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {
isLoading: false, isLoading: false,
}; };
export const loaderSlice = createSlice({ export const loaderSlice = createSlice({
name: 'loader', name: "loader",
initialState, initialState,
reducers: { reducers: {
loading: (state, action) => { loading: (state, action) => {

View File

@ -1,23 +1,23 @@
import { createSlice } from '@reduxjs/toolkit'; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {
tags: [], tags: [],
profiles: [], profiles: [],
filteredCandidates:null, filteredCandidates: null,
selectedItems: [], selectedItems: [],
currentCandidate: {}, currentCandidate: {},
auth: false, auth: false,
positionId: null, positionId: null,
profileInfo: {}, profileInfo: {},
reportsDates: '', reportsDates: "",
partnerEmployees: [], partnerEmployees: [],
partnerRequestId: null, partnerRequestId: null,
partnerRequests: [], partnerRequests: [],
partnerRequestInfo: {} partnerRequestInfo: {},
}; };
export const outstaffingSlice = createSlice({ export const outstaffingSlice = createSlice({
name: 'outstaffing', name: "outstaffing",
initialState, initialState,
reducers: { reducers: {
tags: (state, action) => { tags: (state, action) => {
@ -51,35 +51,55 @@ export const outstaffingSlice = createSlice({
state.reportsDates = action.payload; state.reportsDates = action.payload;
}, },
setPartnerEmployees: (state, action) => { setPartnerEmployees: (state, action) => {
state.partnerEmployees = action.payload state.partnerEmployees = action.payload;
}, },
setPartnerRequestId: (state, action) => { setPartnerRequestId: (state, action) => {
state.partnerRequestId = action.payload state.partnerRequestId = action.payload;
}, },
setPartnerRequests: (state, action) => { setPartnerRequests: (state, action) => {
state.partnerRequests = action.payload state.partnerRequests = action.payload;
}, },
setPartnerRequestInfo: (state, action) => { setPartnerRequestInfo: (state, action) => {
state.partnerRequestInfo = action.payload state.partnerRequestInfo = action.payload;
} },
}, },
}); });
export const { tags, profiles, selectedItems, auth, currentCandidate, filteredCandidates, setPositionId, setUserInfo, setProfileInfo, setReportsDates, setPartnerEmployees, setPartnerRequestId, setPartnerRequests, setPartnerRequestInfo } = outstaffingSlice.actions; export const {
tags,
profiles,
selectedItems,
auth,
currentCandidate,
filteredCandidates,
setPositionId,
setUserInfo,
setProfileInfo,
setReportsDates,
setPartnerEmployees,
setPartnerRequestId,
setPartnerRequests,
setPartnerRequestInfo,
} = outstaffingSlice.actions;
export const selectProfiles = (state) => state.outstaffing.profiles; export const selectProfiles = (state) => state.outstaffing.profiles;
export const selectTags = (state) => state.outstaffing.tags; export const selectTags = (state) => state.outstaffing.tags;
export const selectFilteredCandidates = (state) => state.outstaffing.filteredCandidates; export const selectFilteredCandidates = (state) =>
state.outstaffing.filteredCandidates;
export const selectItems = (state) => state.outstaffing.selectedItems; export const selectItems = (state) => state.outstaffing.selectedItems;
export const selectCurrentCandidate = (state) => state.outstaffing.currentCandidate; export const selectCurrentCandidate = (state) =>
state.outstaffing.currentCandidate;
export const selectAuth = (state) => state.outstaffing.auth; export const selectAuth = (state) => state.outstaffing.auth;
export const getPositionId = (state) => state.outstaffing.positionId; export const getPositionId = (state) => state.outstaffing.positionId;
export const getProfileInfo = (state) => state.outstaffing.profileInfo; export const getProfileInfo = (state) => state.outstaffing.profileInfo;
export const getPartnerRequestInfo = (state) => state.outstaffing.partnerRequestInfo; export const getPartnerRequestInfo = (state) =>
state.outstaffing.partnerRequestInfo;
export const selectUserInfo = (state) => state.outstaffing.userInfo; export const selectUserInfo = (state) => state.outstaffing.userInfo;
export const getReportsDates = (state) => state.outstaffing.reportsDates; export const getReportsDates = (state) => state.outstaffing.reportsDates;
export const getPartnerEmployees = (state) => state.outstaffing.partnerEmployees; export const getPartnerEmployees = (state) =>
export const getPartnerRequestId = (state) => state.outstaffing.partnerRequestId; state.outstaffing.partnerEmployees;
export const getPartnerRequestId = (state) =>
state.outstaffing.partnerRequestId;
export const getPartnerRequests = (state) => state.outstaffing.partnerRequests; export const getPartnerRequests = (state) => state.outstaffing.partnerRequests;
export default outstaffingSlice.reducer; export default outstaffingSlice.reducer;

View File

@ -1,4 +1,5 @@
import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { apiRequest } from "../api/request"; import { apiRequest } from "../api/request";
const initialState = { const initialState = {
@ -8,7 +9,7 @@ const initialState = {
modalType: "", modalType: "",
boardLoader: false, boardLoader: false,
columnName: "", columnName: "",
columnId: 0 columnId: 0,
}; };
export const setProjectBoardFetch = createAsyncThunk("userInfo", (id) => export const setProjectBoardFetch = createAsyncThunk("userInfo", (id) =>
@ -35,11 +36,13 @@ export const projectsTrackerSlice = createSlice({
} }
}); });
}, },
deletePersonOnProject: (state,action) => { deletePersonOnProject: (state, action) => {
state.projectBoard.projectUsers = state.projectBoard.projectUsers.filter((person) => person.user_id !== action.payload) state.projectBoard.projectUsers = state.projectBoard.projectUsers.filter(
(person) => person.user_id !== action.payload
);
}, },
addPersonToProject: (state, action) => { addPersonToProject: (state, action) => {
state.projectBoard.projectUsers.push(action.payload) state.projectBoard.projectUsers.push(action.payload);
}, },
activeLoader: (state) => { activeLoader: (state) => {
state.boardLoader = true; state.boardLoader = true;
@ -54,7 +57,7 @@ export const projectsTrackerSlice = createSlice({
task_id: action.payload.startWrapperIndex.task.id, task_id: action.payload.startWrapperIndex.task.id,
column_id: column.id, column_id: column.id,
}, },
}).then((res) => {}); }).then(() => {});
} }
if (column.id === action.payload.startWrapperIndex.index) { if (column.id === action.payload.startWrapperIndex.index) {
state.projectBoard.columns[index].tasks = column.tasks.filter( state.projectBoard.columns[index].tasks = column.tasks.filter(
@ -64,10 +67,10 @@ export const projectsTrackerSlice = createSlice({
}); });
}, },
setColumnName: (state, action) => { setColumnName: (state, action) => {
state.columnName = action.payload state.columnName = action.payload;
}, },
setColumnId: (state, action) => { setColumnId: (state, action) => {
state.columnId = action.payload state.columnId = action.payload;
}, },
editProjectName: (state, action) => { editProjectName: (state, action) => {
state.projects.forEach((project) => { state.projects.forEach((project) => {
@ -79,9 +82,9 @@ export const projectsTrackerSlice = createSlice({
editColumnName: (state, action) => { editColumnName: (state, action) => {
state.projectBoard.columns.forEach((column) => { state.projectBoard.columns.forEach((column) => {
if (column.id === action.payload.id) { if (column.id === action.payload.id) {
column.title = action.payload.title column.title = action.payload.title;
} }
}) });
}, },
modalToggle: (state, action) => { modalToggle: (state, action) => {
state.modalType = action.payload; state.modalType = action.payload;
@ -108,7 +111,7 @@ export const {
editColumnName, editColumnName,
setColumnId, setColumnId,
deletePersonOnProject, deletePersonOnProject,
addPersonToProject addPersonToProject,
} = projectsTrackerSlice.actions; } = projectsTrackerSlice.actions;
export const getProjects = (state) => state.tracker.projects; export const getProjects = (state) => state.tracker.projects;

View File

@ -1,123 +1,125 @@
import {createAsyncThunk, createSlice} from '@reduxjs/toolkit'; import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import {apiRequest} from "../api/request";
import { apiRequest } from "../api/request";
const initialState = { const initialState = {
answers: [ answers: [
{ {
"id": "12", id: "12",
"question_id": "7", question_id: "7",
"answer_body": "Нsdf sfd fds sdf sf sfsdf sdfеск вsdffsdfsdf sf sdf sdfsdfsdfsdfdsjknsdkf dssdjf sdfbsdhf sd hjdsfv sdhjvар1 отв1 истина" answer_body:
"Нsdf sfd fds sdf sf sfsdf sdfеск вsdffsdfsdf sf sdf sdfsdfsdfsdfdsjknsdkf dssdjf sdfbsdhf sd hjdsfv sdhjvар1 отв1 истина",
}, },
{ {
"id": "23", id: "23",
"question_id": "7", question_id: "7",
"answer_body": "Неск вар1 отв1 истина" answer_body: "Неск вар1 отв1 истина",
}, },
{ {
"id": "233", id: "233",
"question_id": "7", question_id: "7",
"answer_body": "lorem sdfdsf dfs sdf " answer_body: "lorem sdfdsf dfs sdf ",
}, },
], ],
questionnaires: [], questionnaires: [],
questions: [ questions: [
{ {
"id": "4", id: "4",
"question_type_id": "3", question_type_id: "3",
"question_body": "Для чего в Python используется встроенная функция enumerate()?", question_body:
"question_priority": null, "Для чего в Python используется встроенная функция enumerate()?",
"next_question": null, question_priority: null,
"time_limit": "00:22:00" next_question: null,
time_limit: "00:22:00",
}, },
{ {
"id": "24", id: "24",
"question_type_id": "3", question_type_id: "3",
"question_body": "Для чего в Python dfsf троенная функция enumerate()?", question_body: "Для чего в Python dfsf троенная функция enumerate()?",
"question_priority": null, question_priority: null,
"next_question": null, next_question: null,
"time_limit": "00:22:00" time_limit: "00:22:00",
}, },
{ {
"id": "41", id: "41",
"question_type_id": "3", question_type_id: "3",
"question_body": "Для чегоsdfsdfя функция enumerate()?", question_body: "Для чегоsdfsdfя функция enumerate()?",
"question_priority": null, question_priority: null,
"next_question": null, next_question: null,
"time_limit": "00:22:00" time_limit: "00:22:00",
}, },
{ {
"id": "5", id: "5",
"question_type_id": '2', question_type_id: "2",
"question_body": "Один ответ2", question_body: "Один ответ2",
"question_priority": null, question_priority: null,
"next_question": null, next_question: null,
"time_limit": "00:22:00" time_limit: "00:22:00",
} },
], ],
selectedTest: { selectedTest: {
"user_id": 1, user_id: 1,
"uuid": "d222f858-60fd-47fb-8731-dc9d5fc384c5", uuid: "d222f858-60fd-47fb-8731-dc9d5fc384c5",
"score": 11, score: 11,
"status": 2, status: 2,
"percent_correct_answers": 0.25, percent_correct_answers: 0.25,
"testing_date": "2022-03-17 11:14:22", testing_date: "2022-03-17 11:14:22",
"questionnaire_title": "Кат1 Анкета 1 активна" questionnaire_title: "Кат1 Анкета 1 активна",
}, },
selectedAnswers:{}, selectedAnswers: {},
completedTest: false, completedTest: false,
result: null, result: null,
isLoading: false, isLoading: false,
dataQuestionnairesOfUser: [], dataQuestionnairesOfUser: [],
passedTests: [], passedTests: [],
userInfo: null,
userInfo: null,
}; };
export const setUserInfo = createAsyncThunk( export const setUserInfo = createAsyncThunk("userInfo", (id) =>
'userInfo', apiRequest(`/profile/get-main-data?user_id=${id}`)
(id) =>
apiRequest(`/profile/get-main-data?user_id=${id}`)
); );
export const fetchUserAnswersMany = createAsyncThunk( export const fetchUserAnswersMany = createAsyncThunk(
'answersUserMany', "answersUserMany",
(checkedValues) => (checkedValues) =>
apiRequest('/user-response/set-responses', {method: 'POST', data: {"userResponses": checkedValues}}) apiRequest("/user-response/set-responses", {
method: "POST",
data: { userResponses: checkedValues },
})
); );
export const fetchUserAnswerOne = createAsyncThunk( export const fetchUserAnswerOne = createAsyncThunk(
'answersUserOne', "answersUserOne",
(checkedValues) => (checkedValues) =>
apiRequest('/user-response/set-response', {method: 'POST', data: checkedValues[0]}) apiRequest("/user-response/set-response", {
method: "POST",
data: checkedValues[0],
})
); );
export const fetchGetAnswers = createAsyncThunk( export const fetchGetAnswers = createAsyncThunk("answers", (question_id) =>
'answers', apiRequest(`/answer/get-answers?question_id=${question_id}`)
(question_id) =>
apiRequest(`/answer/get-answers?question_id=${question_id}`)
); );
export const fetchResultTest = createAsyncThunk( export const fetchResultTest = createAsyncThunk("result", (uuid) =>
'result', apiRequest(
(uuid) => `/user-questionnaire/questionnaire-completed?user_questionnaire_uuid=${uuid}`
apiRequest(`/user-questionnaire/questionnaire-completed?user_questionnaire_uuid=${uuid}`) )
); );
export const quizSlice = createSlice({ export const quizSlice = createSlice({
name: 'quiz', name: "quiz",
initialState, initialState,
reducers: { reducers: {
setQuestionnaires: (state, action) => { setQuestionnaires: (state, action) => {
state.questionnaires = action.payload; state.questionnaires = action.payload;
}, },
setSelectedTest: (state, action) => { setSelectedTest: (state, action) => {
state.selectedTest = action.payload state.selectedTest = action.payload;
},
setCompleteTest: (state) => {
state.completedTest = true;
}, },
setCompleteTest: (state, action) => {
state.completedTest = true
}
}, },
extraReducers: { extraReducers: {
[setUserInfo.fulfilled]: (state, action) => { [setUserInfo.fulfilled]: (state, action) => {
@ -132,21 +134,18 @@ export const quizSlice = createSlice({
}, },
}); });
export const {setQuestionnaires, setSelectedTest, setCompleteTest} = quizSlice.actions; export const { setQuestionnaires, setSelectedTest, setCompleteTest } =
quizSlice.actions;
export const answersSelector = (state) => state.quiz.answers; export const answersSelector = (state) => state.quiz.answers;
export const questionnairesSelector = (state) => state.quiz.questionnaires; export const questionnairesSelector = (state) => state.quiz.questionnaires;
export const selectedAnswersSelector = (state) => state.quiz.selectedAnswers export const selectedAnswersSelector = (state) => state.quiz.selectedAnswers;
export const questionsSelector = (state) => state.quiz.questions export const questionsSelector = (state) => state.quiz.questions;
export const completedTestSelector = (state) => state.quiz.completedTest export const completedTestSelector = (state) => state.quiz.completedTest;
export const selectResult = (state) => state.quiz.result; export const selectResult = (state) => state.quiz.result;
export const selectedTest = (state) => state.quiz.selectedTest; export const selectedTest = (state) => state.quiz.selectedTest;
export const selectPassedTests = (state) => state.quiz.passedTests; export const selectPassedTests = (state) => state.quiz.passedTests;
export const selectUserInfo = (state) => state.quiz.userInfo; export const selectUserInfo = (state) => state.quiz.userInfo;
export default quizSlice.reducer; export default quizSlice.reducer;

View File

@ -1,11 +1,11 @@
import { createSlice } from '@reduxjs/toolkit'; import { createSlice } from "@reduxjs/toolkit";
const initialState = { const initialState = {
role: null, role: null,
}; };
export const roleSlice = createSlice({ export const roleSlice = createSlice({
name: 'role', name: "role",
initialState, initialState,
reducers: { reducers: {
setRole: (state, action) => { setRole: (state, action) => {

View File

@ -1,10 +1,11 @@
import { configureStore } from "@reduxjs/toolkit"; import { configureStore } from "@reduxjs/toolkit";
import outstaffingReducer from "../redux/outstaffingSlice";
import loaderReducer from "../redux/loaderSlice"; import loaderReducer from "../redux/loaderSlice";
import roleReducer from "../redux/roleSlice"; import outstaffingReducer from "../redux/outstaffingSlice";
import reportReducer from "../redux/reportSlice";
import quizSlice from "../redux/quizSlice";
import projectsTrackerSlice from "../redux/projectsTrackerSlice"; import projectsTrackerSlice from "../redux/projectsTrackerSlice";
import quizSlice from "../redux/quizSlice";
import reportReducer from "../redux/reportSlice";
import roleReducer from "../redux/roleSlice";
export const store = configureStore({ export const store = configureStore({
reducer: { reducer: {

View File

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