Added prettier format imports
This commit is contained in:
parent
fe656c0360
commit
fc8fc33733
7
.prettierignore
Normal file
7
.prettierignore
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
node_modules
|
||||||
|
config
|
||||||
|
public
|
||||||
|
|
||||||
|
*-lock.json
|
||||||
|
|
||||||
|
App.js
|
15
.prettierrc
15
.prettierrc
@ -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
|
||||||
}
|
}
|
||||||
|
103
package-lock.json
generated
103
package-lock.json
generated
@ -53,6 +53,7 @@
|
|||||||
"@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",
|
||||||
@ -5044,6 +5045,86 @@
|
|||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@trivago/prettier-plugin-sort-imports": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/generator": "7.17.7",
|
||||||
|
"@babel/parser": "^7.20.5",
|
||||||
|
"@babel/traverse": "7.17.3",
|
||||||
|
"@babel/types": "7.17.0",
|
||||||
|
"javascript-natural-sort": "0.7.1",
|
||||||
|
"lodash": "^4.17.21"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/compiler-sfc": "3.x",
|
||||||
|
"prettier": "2.x"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/compiler-sfc": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": {
|
||||||
|
"version": "7.17.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz",
|
||||||
|
"integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/types": "^7.17.0",
|
||||||
|
"jsesc": "^2.5.1",
|
||||||
|
"source-map": "^0.5.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse": {
|
||||||
|
"version": "7.17.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
|
||||||
|
"integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/code-frame": "^7.16.7",
|
||||||
|
"@babel/generator": "^7.17.3",
|
||||||
|
"@babel/helper-environment-visitor": "^7.16.7",
|
||||||
|
"@babel/helper-function-name": "^7.16.7",
|
||||||
|
"@babel/helper-hoist-variables": "^7.16.7",
|
||||||
|
"@babel/helper-split-export-declaration": "^7.16.7",
|
||||||
|
"@babel/parser": "^7.17.3",
|
||||||
|
"@babel/types": "^7.17.0",
|
||||||
|
"debug": "^4.1.0",
|
||||||
|
"globals": "^11.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": {
|
||||||
|
"version": "7.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
|
||||||
|
"integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": "^7.16.7",
|
||||||
|
"to-fast-properties": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@trivago/prettier-plugin-sort-imports/node_modules/source-map": {
|
||||||
|
"version": "0.5.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@trysound/sax": {
|
"node_modules/@trysound/sax": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
||||||
@ -12844,6 +12925,12 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/javascript-natural-sort": {
|
||||||
|
"version": "0.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
|
||||||
|
"integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/jest": {
|
"node_modules/jest": {
|
||||||
"version": "27.5.1",
|
"version": "27.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz",
|
||||||
@ -19727,6 +19814,22 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/prettier": {
|
||||||
|
"version": "2.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
|
||||||
|
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"peer": true,
|
||||||
|
"bin": {
|
||||||
|
"prettier": "bin-prettier.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.13.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pretty-bytes": {
|
"node_modules/pretty-bytes": {
|
||||||
"version": "5.6.0",
|
"version": "5.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
"@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",
|
||||||
@ -76,7 +77,8 @@
|
|||||||
"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}\""
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": [
|
"extends": [
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
'postcss-preset-env': {
|
"postcss-preset-env": {
|
||||||
browsers: 'last 2 versions',
|
browsers: "last 2 versions",
|
||||||
},
|
},
|
||||||
|
};
|
||||||
};
|
|
||||||
|
@ -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,
|
||||||
});
|
});
|
||||||
|
@ -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({
|
||||||
|
@ -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";
|
||||||
|
@ -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") {
|
||||||
|
@ -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());
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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) => {
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -2,15 +2,15 @@ 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, isLoadingMore }) => {
|
||||||
|
@ -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);
|
||||||
|
@ -4,13 +4,13 @@ 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";
|
||||||
|
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -1,42 +1,44 @@
|
|||||||
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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -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>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -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 = () => {
|
||||||
|
@ -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,13 +20,8 @@ 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";
|
|
||||||
|
|
||||||
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 }) => {
|
||||||
|
@ -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 = () => {
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 { Redirect, Route } from "react-router-dom";
|
||||||
|
|
||||||
import { selectAuth } from "@redux/outstaffingSlice";
|
import { selectAuth } from "@redux/outstaffingSlice";
|
||||||
|
|
||||||
|
@ -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") {
|
||||||
|
@ -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 = () => {
|
||||||
|
@ -2,17 +2,19 @@ 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";
|
||||||
|
@ -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([
|
||||||
|
@ -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);
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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";
|
||||||
|
@ -2,9 +2,11 @@ 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 }) => {
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -1,91 +1,92 @@
|
|||||||
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, pause, resume, restart } =
|
||||||
expiryTimestamp,
|
useTimer({
|
||||||
autoStart: false,
|
expiryTimestamp,
|
||||||
onExpire: () => {
|
autoStart: false,
|
||||||
console.warn("onExpire called");
|
onExpire: () => {
|
||||||
},
|
console.warn("onExpire called");
|
||||||
});
|
},
|
||||||
const completedTest = useSelector(completedTestSelector);
|
});
|
||||||
|
const completedTest = useSelector(completedTestSelector);
|
||||||
const startTesting = () => {
|
|
||||||
setStartTest(true);
|
const startTesting = () => {
|
||||||
start();
|
setStartTest(true);
|
||||||
};
|
start();
|
||||||
|
};
|
||||||
useEffect(() => {
|
|
||||||
if (completedTest) {
|
useEffect(() => {
|
||||||
const time = new Date();
|
if (completedTest) {
|
||||||
time.setSeconds(time.getSeconds() + 0); //600 - кол-во секунд для прохождения теста
|
const time = new Date();
|
||||||
restart(time, false);
|
time.setSeconds(time.getSeconds() + 0); //600 - кол-во секунд для прохождения теста
|
||||||
}
|
restart(time, false);
|
||||||
}, [completedTest]);
|
}
|
||||||
|
}, [completedTest]);
|
||||||
return (
|
|
||||||
<div className="quiz-passing-information">
|
return (
|
||||||
<div className="quiz-passing-information__container">
|
<div className="quiz-passing-information">
|
||||||
<div className="quiz-passing-information__main">
|
<div className="quiz-passing-information__container">
|
||||||
<div className="quiz-passing-information__specialization">
|
<div className="quiz-passing-information__main">
|
||||||
<StarRating
|
<div className="quiz-passing-information__specialization">
|
||||||
color={"#52B709"}
|
<StarRating
|
||||||
countStars={1}
|
color={"#52B709"}
|
||||||
countActiveStars={0.5}
|
countStars={1}
|
||||||
size={61}
|
countActiveStars={0.5}
|
||||||
/>
|
size={61}
|
||||||
<div className="quiz-passing-information__specialization-title">
|
/>
|
||||||
Junior <br />
|
<div className="quiz-passing-information__specialization-title">
|
||||||
разработчик
|
Junior <br />
|
||||||
</div>
|
разработчик
|
||||||
</div>
|
</div>
|
||||||
<div className="quiz-passing-information__timer timer-quiz">
|
</div>
|
||||||
<div className="quiz-passing-information__icon">
|
<div className="quiz-passing-information__timer timer-quiz">
|
||||||
<img src={timer} alt="" />
|
<div className="quiz-passing-information__icon">
|
||||||
</div>
|
<img src={timer} alt="" />
|
||||||
<div className="quiz-passing-information__text">
|
</div>
|
||||||
{completedTest ? "Время вышло" : "Время на прохождение теста:"}{" "}
|
<div className="quiz-passing-information__text">
|
||||||
<br />
|
{completedTest ? "Время вышло" : "Время на прохождение теста:"}{" "}
|
||||||
<span>
|
<br />
|
||||||
{minutes.toString().padStart(2, "0") +
|
<span>
|
||||||
":" +
|
{minutes.toString().padStart(2, "0") +
|
||||||
seconds.toString().padStart(2, "0")}{" "}
|
":" +
|
||||||
секунд
|
seconds.toString().padStart(2, "0")}{" "}
|
||||||
</span>
|
секунд
|
||||||
</div>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="quiz-passing-information__attempt">
|
</div>
|
||||||
<div className="quiz-passing-information__icon">
|
<div className="quiz-passing-information__attempt">
|
||||||
<img src={accempt} alt="" />
|
<div className="quiz-passing-information__icon">
|
||||||
</div>
|
<img src={accempt} alt="" />
|
||||||
<div className="quiz-passing-information__text">
|
</div>
|
||||||
Попыток прохождения: <br />
|
<div className="quiz-passing-information__text">
|
||||||
<span>1 попытка</span>
|
Попыток прохождения: <br />
|
||||||
</div>
|
<span>1 попытка</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
</div>
|
||||||
{!completedTest && !isRunning && (
|
<div>
|
||||||
<button
|
{!completedTest && !isRunning && (
|
||||||
className="quiz-passing-information__button btn-green"
|
<button
|
||||||
onClick={startTesting}
|
className="quiz-passing-information__button btn-green"
|
||||||
>
|
onClick={startTesting}
|
||||||
Начать
|
>
|
||||||
</button>
|
Начать
|
||||||
)}
|
</button>
|
||||||
</div>
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
{/* {isRunning && <button className="quiz-passing-information__button quiz-btn" onClick={pause}>Завершить</button>} */}
|
|
||||||
</div>
|
{/* {isRunning && <button className="quiz-passing-information__button quiz-btn" onClick={pause}>Завершить</button>} */}
|
||||||
</div>
|
</div>
|
||||||
);
|
</div>
|
||||||
};
|
);
|
||||||
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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>
|
||||||
};
|
);
|
||||||
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -1,25 +1,25 @@
|
|||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
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,
|
||||||
|
selectedTest,
|
||||||
setAnswers,
|
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 = () => {
|
||||||
|
@ -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;
|
||||||
|
@ -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 };
|
||||||
};
|
};
|
||||||
|
23
src/index.js
23
src/index.js
@ -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>,
|
);
|
||||||
);
|
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
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";
|
||||||
|
|
||||||
|
@ -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 (
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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, setQuestion] = 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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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") {
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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 (
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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();
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -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";
|
||||||
|
@ -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";
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -1,107 +1,108 @@
|
|||||||
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, selectedTest } 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 selectedTest = useSelector(selectedTest)
|
||||||
if ("") {
|
|
||||||
}
|
if ("") {
|
||||||
|
}
|
||||||
const time = new Date();
|
|
||||||
time.setSeconds(time.getSeconds() + 600); //600 - кол-во секунд для прохождения теста
|
const time = new Date();
|
||||||
|
time.setSeconds(time.getSeconds() + 600); //600 - кол-во секунд для прохождения теста
|
||||||
const [startTest, setStartTest] = useState(false);
|
|
||||||
const completedTest = useSelector(completedTestSelector);
|
const [startTest, setStartTest] = useState(false);
|
||||||
|
const completedTest = useSelector(completedTestSelector);
|
||||||
const introduction = [
|
|
||||||
{
|
const introduction = [
|
||||||
title: "Зачем?",
|
{
|
||||||
description:
|
title: "Зачем?",
|
||||||
"Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.",
|
description:
|
||||||
},
|
"Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.",
|
||||||
{
|
},
|
||||||
title: "Почему именно тестирование?",
|
{
|
||||||
description:
|
title: "Почему именно тестирование?",
|
||||||
"Тесты itguild заменяют первое техническое собеседование по любой вакансии.",
|
description:
|
||||||
},
|
"Тесты itguild заменяют первое техническое собеседование по любой вакансии.",
|
||||||
{
|
},
|
||||||
title: "Какие тесты нужно проходить?",
|
{
|
||||||
description:
|
title: "Какие тесты нужно проходить?",
|
||||||
"Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.",
|
description:
|
||||||
},
|
"Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.",
|
||||||
];
|
},
|
||||||
|
];
|
||||||
return (
|
|
||||||
<div className="passing-tests-page">
|
return (
|
||||||
<ProfileHeader />
|
<div className="passing-tests-page">
|
||||||
<HeadBottom />
|
<ProfileHeader />
|
||||||
<div className="passing-tests-page__container">
|
<HeadBottom />
|
||||||
<ProfileBreadcrumbs
|
<div className="passing-tests-page__container">
|
||||||
links={[
|
<ProfileBreadcrumbs
|
||||||
{ name: "Главная", link: "/profile-candidate" },
|
links={[
|
||||||
{ name: "Тестирование", link: "/quiz" },
|
{ name: "Главная", link: "/profile-candidate" },
|
||||||
{ name: "Прохождение тестов", link: "/quiz/test" },
|
{ name: "Тестирование", link: "/quiz" },
|
||||||
]}
|
{ name: "Прохождение тестов", link: "/quiz/test" },
|
||||||
/>
|
]}
|
||||||
<div className="passing-tests-page__title main-title">
|
/>
|
||||||
Тестирование в позиции Junior разработчик{" "}
|
<div className="passing-tests-page__title main-title">
|
||||||
</div>
|
Тестирование в позиции Junior разработчик{" "}
|
||||||
<div className="passing-tests-page__passing-information">
|
</div>
|
||||||
<QuizPassingInformation
|
<div className="passing-tests-page__passing-information">
|
||||||
expiryTimestamp={time}
|
<QuizPassingInformation
|
||||||
setStartTest={setStartTest}
|
expiryTimestamp={time}
|
||||||
/>
|
setStartTest={setStartTest}
|
||||||
</div>
|
/>
|
||||||
|
</div>
|
||||||
{!completedTest && (
|
|
||||||
<>
|
{!completedTest && (
|
||||||
{startTest && (
|
<>
|
||||||
<div className="passing-tests-page__block-green">
|
{startTest && (
|
||||||
Тестирование началось
|
<div className="passing-tests-page__block-green">
|
||||||
</div>
|
Тестирование началось
|
||||||
)}
|
</div>
|
||||||
{startTest ? (
|
)}
|
||||||
<TaskQuiz />
|
{startTest ? (
|
||||||
) : (
|
<TaskQuiz />
|
||||||
<div className="passing-tests-page__introduction">
|
) : (
|
||||||
{introduction.map((item, i) => (
|
<div className="passing-tests-page__introduction">
|
||||||
<CardIntroduction
|
{introduction.map((item, i) => (
|
||||||
description={item.description}
|
<CardIntroduction
|
||||||
title={item.title}
|
description={item.description}
|
||||||
key={i}
|
title={item.title}
|
||||||
/>
|
key={i}
|
||||||
))}
|
/>
|
||||||
</div>
|
))}
|
||||||
)}
|
</div>
|
||||||
{!startTest && (
|
)}
|
||||||
<div className="passing-tests-page__block-text block-text">
|
{!startTest && (
|
||||||
ИЛИ <Link to={""}>выполните тестове задание</Link> , без
|
<div className="passing-tests-page__block-text block-text">
|
||||||
прохождения тестов
|
ИЛИ <Link to={""}>выполните тестове задание</Link> , без
|
||||||
</div>
|
прохождения тестов
|
||||||
)}
|
</div>
|
||||||
</>
|
)}
|
||||||
)}
|
</>
|
||||||
{completedTest && (
|
)}
|
||||||
<>
|
{completedTest && (
|
||||||
<div className="passing-tests-page__block-green">
|
<>
|
||||||
Тестирование завершено
|
<div className="passing-tests-page__block-green">
|
||||||
</div>
|
Тестирование завершено
|
||||||
<BlockCompletedTest />
|
</div>
|
||||||
</>
|
<BlockCompletedTest />
|
||||||
)}
|
</>
|
||||||
</div>
|
)}
|
||||||
<Footer />
|
</div>
|
||||||
</div>
|
<Footer />
|
||||||
);
|
</div>
|
||||||
};
|
);
|
||||||
|
};
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -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) => {
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
@ -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;
|
||||||
|
@ -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, action) => {
|
setCompleteTest: (state, action) => {
|
||||||
state.completedTest = true
|
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;
|
||||||
|
|
||||||
|
@ -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) => {
|
||||||
|
@ -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: {
|
||||||
|
@ -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: "Копирайтер",
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user