diff --git a/src/App.js b/src/App.js index fd9c9505..e459d6c9 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,10 @@ -import React from 'react' -import {BrowserRouter as Router, Route, Routes, Navigate} from 'react-router-dom'; - +import React from "react"; +import { + BrowserRouter as Router, + Route, + Routes, + Navigate, +} from "react-router-dom"; import AuthForPartners from "./pages/AuthForPartners/AuthForPartners"; import AuthForDevelopers from "./pages/AuthForDevelopers/AuthForDevelopers"; @@ -9,17 +13,17 @@ import Candidate from "./components/Candidate/Candidate"; import Calendar from "./components/Calendar/Calendar"; import ReportForm from "./components/ReportForm/ReportForm"; import FreeDevelopers from "./components/UI/FreeDevelopers/FreeDevelopers"; +import { TicketFullScreen } from "./components/UI/TicketFullScreen/TicketFullScreen"; import { ProfileCalendar } from "./components/ProfileCalendar/ProfileCalendar"; import FormPage from "./pages/FormPage/FormPage.js"; import SingleReportPage from "./pages/SingleReportPage/SingleReportPage"; import { QuizPage } from "./pages/quiz/QuizPage"; -import {QuizReportPage} from './pages/quiz/QuizReportPage'; +import { QuizReportPage } from "./pages/quiz/QuizReportPage"; import { Profile } from "./pages/Profile/Profile.js"; import { Summary } from "./pages/Summary/Summary"; import { ViewReport } from "./pages/ViewReport/ViewReport"; import { Tracker } from "./pages/Tracker/Tracker"; import { Payouts } from "./pages/Payouts/Payouts"; -import { TicketFullScreen } from "./components/UI/TicketFullScreen/TicketFullScreen"; import { PartnerSettings } from "./pages/PartnerSettings/PartnerSettings"; import { PartnerRequests } from "./pages/PartnerRequests/PartnerRequests"; import { PartnerAddRequest } from "./pages/PartnerAddRequest/PartnerAddRequest"; @@ -27,75 +31,78 @@ import { PartnerBid } from "./pages/PartnerBid/PartnerBid"; import { PartnerCategories } from "./pages/PartnerСategories/PartnerСategories"; import { PartnerTreaties } from "./pages/PartnerTreaties/PartnerTreaties"; import { PartnerEmployees } from "./pages/PartnerEmployees/PartnerEmployees"; -import {AuthForCandidate} from "./pages/AuthForCandidate/AuthForCandidate"; -import {RegistrationForCandidate} from "./pages/RegistrationForCandidate/RegistrationForCandidate"; - -import './assets/global.scss' -import './fonts/stylesheet.css' -import 'bootstrap/dist/css/bootstrap.min.css' -import { ProfileCandidate } from './pages/ProfileCandidate/ProfileCandidate'; -import { PassingTests } from './pages/quiz/PassingTests'; - - +import { AuthForCandidate } from "./pages/AuthForCandidate/AuthForCandidate"; +import { RegistrationForCandidate } from "./pages/RegistrationForCandidate/RegistrationForCandidate"; +import { ProfileCandidate } from "./pages/ProfileCandidate/ProfileCandidate"; +import { PassingTests } from "./pages/quiz/PassingTests"; +import "./assets/global.scss"; +import "./fonts/stylesheet.css"; +import "bootstrap/dist/css/bootstrap.min.css"; const App = () => { return ( - <> - + <> + + + } /> + } /> + } /> + } + > + } /> + } + /> - + } /> + } /> + } /> - }/> - }/> - } /> + } /> + } /> + + + } /> + } /> + } /> + + + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> } - > - }/> - }/> + exact + path="categories/employees" + element={} + /> + + + } /> + - }/> - }/> - }/> - - }/> - }/> - - - }/> - }/> - }/> - - - - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - - - }/> - - - }/> - - - - ) + } /> + + + + ); }; -export default App +export default App; diff --git a/src/components/Candidate/Candidate.js b/src/components/Candidate/Candidate.js index 56f5f2c1..d22dfc28 100644 --- a/src/components/Candidate/Candidate.js +++ b/src/components/Candidate/Candidate.js @@ -1,35 +1,38 @@ -import React, {useEffect, useState} from 'react' -import {useParams, Link, useNavigate, Navigate} from 'react-router-dom' -import {useSelector, useDispatch} from 'react-redux' +import React, { useEffect, useState } from "react"; +import { useParams, Link, useNavigate, Navigate } from "react-router-dom"; +import { useSelector, useDispatch } from "react-redux"; -import SkillSection from '../SkillSection/SkillSection' -import Sidebar from '../CandidateSidebar/CandidateSidebar' -import {ProfileHeader} from "../ProfileHeader/ProfileHeader"; -import {ProfileBreadcrumbs} from "../ProfileBreadcrumbs/ProfileBreadcrumbs"; -import {Footer} from '../Footer/Footer' +import SkillSection from "../SkillSection/SkillSection"; +import Sidebar from "../CandidateSidebar/CandidateSidebar"; +import { ProfileHeader } from "../ProfileHeader/ProfileHeader"; +import { ProfileBreadcrumbs } from "../ProfileBreadcrumbs/ProfileBreadcrumbs"; +import { Footer } from "../Footer/Footer"; -import {currentCandidate, selectCurrentCandidate,} from '../../redux/outstaffingSlice' +import { + currentCandidate, + selectCurrentCandidate, +} from "../../redux/outstaffingSlice"; -import {apiRequest} from "../../api/request"; -import {createMarkup} from "../../helper"; +import { apiRequest } from "../../api/request"; +import { createMarkup } from "../../helper"; -import gitImgItem from "../../images/gitItemImg.png" -import rectangle from '../../images/rectangle_secondPage.png' -import front from '../Outstaffing/images/front_end.png' -import back from '../Outstaffing/images/back_end.png' -import design from '../Outstaffing/images/design.png' -import rightArrow from "../../images/arrowRight.png" +import gitImgItem from "../../images/gitItemImg.png"; +import rectangle from "../../images/rectangle_secondPage.png"; +import front from "../Outstaffing/images/front_end.png"; +import back from "../Outstaffing/images/back_end.png"; +import design from "../Outstaffing/images/design.png"; +import rightArrow from "../../images/arrowRight.png"; -import {LEVELS, SKILLS} from '../../constants/constants' - -import './candidate.scss' +import { LEVELS, SKILLS } from "../../constants/constants"; +import "./candidate.scss"; +import { Navigation } from "../Navigation/Navigation"; const Candidate = () => { - if(localStorage.getItem('role_status') !== '18') { - return + if (localStorage.getItem("role_status") !== "18") { + return ; } - const {id: candidateId} = useParams(); + const { id: candidateId } = useParams(); const navigate = useNavigate(); @@ -39,190 +42,201 @@ const Candidate = () => { const [activeSnippet, setActiveSnippet] = useState(true); - - useEffect(() => { - window.scrollTo(0, 0) + window.scrollTo(0, 0); }, []); useEffect(() => { apiRequest(`/profile/${candidateId}`, { params: Number(candidateId), - }).then((el) => dispatch(currentCandidate(el))) + }).then((el) => dispatch(currentCandidate(el))); }, [dispatch, candidateId]); - const {position_id, skillValues, vc_text: text} = currentCandidateObj; + const { position_id, skillValues, vc_text: text } = currentCandidateObj; const setStyles = () => { const styles = { - classes: '', - header: '', - img: '' + classes: "", + header: "", + img: "", }; switch (Number(position_id)) { case 1: { - styles.classes = 'back'; - styles.header = 'Backend'; + styles.classes = "back"; + styles.header = "Backend"; styles.img = back; - break + break; } case 2: { - styles.classes = 'des'; - styles.header = 'Frontend'; + styles.classes = "des"; + styles.header = "Frontend"; styles.img = front; - break + break; } case 3: { - styles.classes = 'front'; - styles.header = 'Design'; + styles.classes = "front"; + styles.header = "Design"; styles.img = design; - break + break; } default: - break + break; } - return styles + return styles; }; - const {header, img, classes} = setStyles(); + const { header, img, classes } = setStyles(); return ( -
- -
- + + +
+ + /> -
-
+
+
+
+

+ {currentCandidateObj.specification}  {" "} + {SKILLS[currentCandidateObj.position_id]}  {" "} + {LEVELS[currentCandidateObj.level]} +

+
navigate("/profile/catalog")} + > +
+ +
+
+ Вернуться к списку +
+
+
-
-

{currentCandidateObj.specification}   {SKILLS[currentCandidateObj.position_id]}   {LEVELS[currentCandidateObj.level]}

-
navigate('/profile/catalog')}> -
- -
-
- Вернуться к списку +
+

{header}

+ +
+
+
+
+
+
+ +
+ {activeSnippet ? ( +
+
+ +

# Описание опыта

+ {text ? ( +
+ ) : ( +

+ {currentCandidateObj.vc_text + ? currentCandidateObj.vc_text + : "Описание отсутствует..."} +

+ )} + + +
+
+ ) : ( +
+
+
+
+

Страница портфолио кода разработчика

+
+
+ +
+
+ img +
+
cybershop-api
+

Реактивная социальная сеть

+
+
+
+ arrow +
+
+ JavaScript + +
+
+ +
+
+ img +
+
cybershop-api
+

Реактивная социальная сеть

+
+
+
+ arrow +
+
+ JavaScript + +
+
+ +
+
+ img +
+
cybershop-api
+

Реактивная социальная сеть

+
+
+
+ arrow +
+
+ JavaScript + +
- -
-

{header}

- -
- -
+ )}
-
-
-
- -
- { - activeSnippet ? - ( -
-
- -

# Описание опыта

- {text ? ( -
- ) : ( -

- {currentCandidateObj.vc_text - ? currentCandidateObj.vc_text - : 'Описание отсутствует...'} -

- )} - - - -
-
- ) : - ( -
-
-
-
-

Страница портфолио кода разработчика

-
-
- -
-
- img -
-
cybershop-api
-

Реактивная социальная сеть

-
-
-
- arrow -
-
- JavaScript - -
-
- -
-
- img -
-
cybershop-api
-

Реактивная социальная сеть

-
-
-
- arrow -
-
- JavaScript - -
-
- -
-
- img -
-
cybershop-api
-

Реактивная социальная сеть

-
-
-
- arrow -
-
- JavaScript - -
-
-
-
- ) - } - -
-
-
+
- ) +
+ ); }; -export default Candidate +export default Candidate; diff --git a/src/components/CandidateSidebar/candidateSidebar.scss b/src/components/CandidateSidebar/candidateSidebar.scss index dcbc44ac..05e4763f 100644 --- a/src/components/CandidateSidebar/candidateSidebar.scss +++ b/src/components/CandidateSidebar/candidateSidebar.scss @@ -29,7 +29,7 @@ } &__info { - padding-bottom: 40px; + padding: 15px 0 40px 0; text-align: center; margin-top: 10px; width: 100%; diff --git a/src/components/Description/Description.js b/src/components/Description/Description.js index a8458d8c..031a07be 100644 --- a/src/components/Description/Description.js +++ b/src/components/Description/Description.js @@ -1,143 +1,114 @@ -import React from 'react' -import {useSelector} from 'react-redux' -import {Link} from 'react-router-dom' +import React from "react"; +import { useSelector } from "react-redux"; +import { Link } from "react-router-dom"; import ErrorBoundary from "../../hoc/ErrorBoundary"; -import {LEVELS, SKILLS} from '../../constants/constants' -import {selectProfiles} from '../../redux/outstaffingSlice' +import { LEVELS, SKILLS } from "../../constants/constants"; +import { selectProfiles } from "../../redux/outstaffingSlice"; -import {urlForLocal} from '../../helper' +import { urlForLocal } from "../../helper"; -import male from '../../images/medium_male.png' -import rectangle from '../../images/rectangle_secondPage.png' +import male from "../../images/medium_male.png"; +import rectangle from "../../images/rectangle_secondPage.png"; +import cursorImg from "../../images/cursorImg.png"; -import './description.scss' - - -const Description = ({onLoadMore, isLoadingMore}) => { +import "./description.scss"; +const Description = ({ onLoadMore, isLoadingMore }) => { const candidatesListArr = useSelector(selectProfiles); return ( -
-
-
- - {candidatesListArr && Array.isArray(candidatesListArr) && candidatesListArr.length > 0 - ? candidatesListArr.map((el) => ( -
-
- {el.photo && } -
-
-

- - {' '} - {el.specification} {SKILLS[el.position_id]},{' '} - {LEVELS[el.level]}{' '} - -

+
+
+
+ + {candidatesListArr && + Array.isArray(candidatesListArr) && + candidatesListArr.length > 0 ? ( + candidatesListArr.map((el) => ( +
+
+ {el.photo && ( + + )} +
+
+

+ + {" "} + {el.specification} {SKILLS[el.position_id]},{" "} + {LEVELS[el.level]}{" "} + +

- {el.vc_text_short ? ( -
- {el.vc_text_short} -
- ) : ( -

- Описание отсутствует... -

- )} -
-
- - - -
-
-
-
    - {Array.isArray(el?.skillValues) && el.skillValues?.map((e) => ( -
  • - {e.skill.name} -
  • - ))} -
- -
-
+ {el.vc_text_short ? ( +
+ {el.vc_text_short}
- )) - : /* :
В данный момент в категории нет свободных специалистов
} */ - candidatesListArr && Array.isArray(candidatesListArr) && - candidatesListArr.map((el) => ( -
-
- -
-
-

- {SKILLS[el.position_id]}, {LEVELS[el.level]} -

- - {el.vc_text_short ? ( -
- {el.vc_text_short} -
- ) : ( -

- Описание отсутствует... -

- )} -
-
- - - -
-
-
-
    - {Array.isArray(el?.skillValues) && el.skillValues?.map((e) => ( -
  • - {e.skill.name} -
  • - ))} -
- -
-
-
- ))} - -
- -
-
-
-
- {candidatesListArr && ( - - )} + ) : ( +

+ Описание отсутствует... +

+ )} +
+
+ + + +
+
+
+
    + {Array.isArray(el?.skillValues) && + el.skillValues?.map((e) => ( +
  • + {e.skill.name} +
  • + ))} +
+ +
+
+ )) + ) : ( +
+ + +

+ В данный момент нет свободных специалистов в + данной категории +

+
+ )} + +
+ +
+
+
+
+ {candidatesListArr && ( + + )}
-
- ) +
+
+ ); }; -export default Description +export default Description; diff --git a/src/components/Description/description.scss b/src/components/Description/description.scss index 1bb5e1d3..190f7b28 100644 --- a/src/components/Description/description.scss +++ b/src/components/Description/description.scss @@ -3,7 +3,7 @@ margin-bottom: 120px; &__title { - font-family: 'GT Eesti Pro Display'; + font-family: "GT Eesti Pro Display"; font-size: 2.6em; font-weight: 700; font-style: normal; @@ -18,13 +18,24 @@ } &__empty { - font-family: 'GT Eesti Pro Display'; - font-size: 2.4em; - font-weight: 500; + font-family: "LabGrotesque", sans-serif; font-style: normal; - letter-spacing: normal; - line-height: normal; + font-weight: 700; + font-size: 16px; + line-height: 32px; text-align: center; + + display: flex; + align-items: center; + justify-content: center; + + span { + color: #406128; + } + + img { + margin-right: 30px; + } } &____wrapper { @@ -43,7 +54,7 @@ } &__text { - font-family: 'GT Eesti Pro Display'; + font-family: "GT Eesti Pro Display"; font-size: 1.6em; font-weight: 100; font-style: normal; @@ -54,7 +65,7 @@ word-wrap: break-word; &-secondary { - font-family: 'GT Eesti Pro Display'; + font-family: "GT Eesti Pro Display"; font-size: 1.7em; font-weight: 100; font-style: normal; @@ -72,7 +83,7 @@ background-color: #73c141; border: none; color: #ffffff; - font-family: 'Muller'; + font-family: "Muller"; font-weight: bold; font-size: 1.6em; line-height: normal; @@ -95,7 +106,7 @@ flex-wrap: wrap; &-item { - font-family: 'GT Eesti Pro Display'; + font-family: "GT Eesti Pro Display"; font-size: 1.7em; font-weight: 400; font-style: normal; @@ -126,7 +137,7 @@ background-color: white; margin-right: 60px; color: #a0a0a0; - font-family: 'GT Eesti Pro Display'; + font-family: "GT Eesti Pro Display"; font-size: 1.8em; font-weight: 400; font-style: normal; diff --git a/src/components/SideBar/SideBar.js b/src/components/SideBar/SideBar.js index 89702468..537afbab 100644 --- a/src/components/SideBar/SideBar.js +++ b/src/components/SideBar/SideBar.js @@ -60,6 +60,12 @@ export const SideBar = () => {
  • Контакты
  • +
  • + Блог +
  • +
  • + FAQ +
  • Политика конфиденциальности

    diff --git a/src/pages/AuthForDevelopers/AuthForDevelopers.js b/src/pages/AuthForDevelopers/AuthForDevelopers.js index 2b375364..55fa8c17 100644 --- a/src/pages/AuthForDevelopers/AuthForDevelopers.js +++ b/src/pages/AuthForDevelopers/AuthForDevelopers.js @@ -4,7 +4,7 @@ import { AuthBox } from "../../components/AuthBox/AuthBox"; import { useSelector } from "react-redux"; import arrow from "../../images/arrow__login_page.png"; -import authImg from "../../images/auth_img.png"; +import medium from "../../images/medium_male_big.png"; import cross from "../../images/cross.png"; import text from "../../images/Body_Text.png"; import arrowBtn from "../../images/arrowRight.png"; @@ -78,10 +78,10 @@ const AuthForDevelopers = () => {
    - +

    - Управление -
    командой + Frontend разработчик, +
    Middle

    @@ -100,13 +100,12 @@ const AuthForDevelopers = () => {
    • - Рабочее -
      - пространство -
    • -
    • - Управление задачами + Ruby on Rails
    • +
    • PHP
    • +
    • Python
    • +
    • Vue.js
    • +
    • React. JS
    diff --git a/src/pages/AuthForDevelopers/authForDevelopers.scss b/src/pages/AuthForDevelopers/authForDevelopers.scss index d41efce7..06607e33 100644 --- a/src/pages/AuthForDevelopers/authForDevelopers.scss +++ b/src/pages/AuthForDevelopers/authForDevelopers.scss @@ -35,7 +35,6 @@ display: none; } } - &__info { background-color: #e1fccf; margin-top: 70px; @@ -45,10 +44,20 @@ padding-bottom: 310px; } + &__info-box { + display: flex; + align-items: center; + } + @media (max-width: 575.98px) { &__info { max-width: 380px; } + + &__info-box { + flex-direction: column; + justify-content: center; + } } @media (max-width: 375.98px) { @@ -57,21 +66,9 @@ } } - &__info-box { - display: flex; - align-items: center; - } - - @media (max-width: 575.98px) { - &__info-box { - flex-direction: column; - justify-content: center; - } - } - &__info-box > img { - width: 150px; - height: 150px; + width: 165px; + height: 165px; margin-left: -84px; margin-right: 30px; } @@ -132,7 +129,7 @@ list-style: none; margin-top: 110px; position: absolute; - left: 34px; + right: -70px; } @media (max-width: 575.98px) { @@ -144,7 +141,7 @@ &__info-item { color: #1f1f1f; font-family: "GT Eesti Pro Display"; - font-size: 2.6em; + font-size: 4em; font-weight: 700; font-style: normal; letter-spacing: normal; @@ -152,13 +149,11 @@ text-align: left; text-decoration: underline; text-transform: uppercase; - margin-bottom: 34px; } @media (max-width: 575.98px) { &__info-item { font-size: 2.6em; - margin-bottom: 14px; } } @@ -174,6 +169,7 @@ bottom: -40px; } } + //////////////////////////////////// &__auth-link { display: block; diff --git a/src/pages/AuthForPartners/AuthForPartners.js b/src/pages/AuthForPartners/AuthForPartners.js index 297f3d8e..3d0dc919 100644 --- a/src/pages/AuthForPartners/AuthForPartners.js +++ b/src/pages/AuthForPartners/AuthForPartners.js @@ -1,6 +1,6 @@ import React, { useEffect } from "react"; import arrow from "../../images/arrow__login_page.png"; -import medium from "../../images/medium_male_big.png"; +import authImg from "../../images/auth_img.png"; import cross from "../../images/cross.png"; import text from "../../images/Body_Text.png"; import arrowBtn from "../../images/arrowRight.png"; @@ -71,13 +71,14 @@ const AuthForPartners = () => {
    +
    - +

    - Frontend разработчик, -
    Middle + Управление +
    командой

    @@ -95,11 +96,14 @@ const AuthForPartners = () => {
      -
    • Ruby on Rails
    • -
    • PHP
    • -
    • Python
    • -
    • Vue.js
    • -
    • React. JS
    • +
    • + Рабочее +
      + пространство +
    • +
    • + Управление задачами +
    diff --git a/src/pages/AuthForPartners/authForPartners.scss b/src/pages/AuthForPartners/authForPartners.scss index 427ff6cc..13c9e23e 100644 --- a/src/pages/AuthForPartners/authForPartners.scss +++ b/src/pages/AuthForPartners/authForPartners.scss @@ -45,20 +45,10 @@ padding-bottom: 310px; } - &__info-box { - display: flex; - align-items: center; - } - @media (max-width: 575.98px) { &__info { max-width: 380px; } - - &__info-box { - flex-direction: column; - justify-content: center; - } } @media (max-width: 375.98px) { @@ -67,9 +57,21 @@ } } + &__info-box { + display: flex; + align-items: center; + } + + @media (max-width: 575.98px) { + &__info-box { + flex-direction: column; + justify-content: center; + } + } + &__info-box > img { - width: 165px; - height: 165px; + width: 150px; + height: 150px; margin-left: -84px; margin-right: 30px; } @@ -130,7 +132,7 @@ list-style: none; margin-top: 110px; position: absolute; - right: -70px; + left: 34px; } @media (max-width: 575.98px) { @@ -142,7 +144,7 @@ &__info-item { color: #1f1f1f; font-family: "GT Eesti Pro Display"; - font-size: 4em; + font-size: 2.6em; font-weight: 700; font-style: normal; letter-spacing: normal; @@ -150,11 +152,13 @@ text-align: left; text-decoration: underline; text-transform: uppercase; + margin-bottom: 34px; } @media (max-width: 575.98px) { &__info-item { font-size: 2.6em; + margin-bottom: 14px; } } diff --git a/src/pages/PartnerBid/PartnerBid.js b/src/pages/PartnerBid/PartnerBid.js index 0dd3d7e9..b2fe77c3 100644 --- a/src/pages/PartnerBid/PartnerBid.js +++ b/src/pages/PartnerBid/PartnerBid.js @@ -1,182 +1,262 @@ -import React, {useEffect, useState} from 'react'; -import {Link, Navigate, useNavigate} from "react-router-dom"; -import {useSelector, useDispatch} from 'react-redux' -import {getPartnerRequestId, getPartnerRequests, setPartnerRequestId, setPartnerRequestInfo} from '../../redux/outstaffingSlice' +import React, { useEffect, useState } from "react"; +import { Link, Navigate, useNavigate } from "react-router-dom"; +import { useSelector, useDispatch } from "react-redux"; +import { + getPartnerRequestId, + getPartnerRequests, + setPartnerRequestId, + setPartnerRequestInfo, +} from "../../redux/outstaffingSlice"; -import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader"; -import {ProfileBreadcrumbs} from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs" -import {Footer} from "../../components/Footer/Footer"; -import { Navigation } from '../../components/Navigation/Navigation'; -import {Loader} from "../../components/Loader/Loader" +import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader"; +import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"; +import { Footer } from "../../components/Footer/Footer"; +import { Navigation } from "../../components/Navigation/Navigation"; +import { Loader } from "../../components/Loader/Loader"; +import ModalAdd from "../../components/UI/ModalAdd/ModalAdd"; -import {apiRequest} from "../../api/request"; -import {getCorrectDate} from "../../components/Calendar/calendarHelper"; +import { apiRequest } from "../../api/request"; +import { getCorrectDate } from "../../components/Calendar/calendarHelper"; -import {urlForLocal} from '../../helper' +import { urlForLocal } from "../../helper"; import arrowSwitchDate from "../../images/arrowViewReport.png"; import backEndImg from "../../images/QualificationInfo.png"; import middle from "../../images/QualificationInfoMiddle.png"; -import deleteBtn from "../../images/deleteBtn.png" +import deleteBtn from "../../images/deleteBtn.png"; -import './partnerBid.scss' +import "./partnerBid.scss"; export const PartnerBid = () => { - if(localStorage.getItem('role_status') !== '18') { - return - } + if (localStorage.getItem("role_status") !== "18") { + return ; + } - const dispatch = useDispatch(); - const requestId = useSelector(getPartnerRequestId); - const partnerRequests = useSelector(getPartnerRequests); - const navigate= useNavigate(); + const dispatch = useDispatch(); + const requestId = useSelector(getPartnerRequestId); + const partnerRequests = useSelector(getPartnerRequests); + const navigate = useNavigate(); - if (!requestId) { - return - } + if (!requestId) { + return ; + } - useEffect(() => { - setLoader(true) - apiRequest(`/request/get-request?request_id=${requestId}`).then((el) => { - setRequestInfo(el) - dispatch(setPartnerRequestInfo(el)) - setLoader(false) - }) - }, [requestId]); + useEffect(() => { + setLoader(true); + apiRequest(`/request/get-request?request_id=${requestId}`).then((el) => { + setRequestInfo(el); + dispatch(setPartnerRequestInfo(el)); + setLoader(false); + }); + }, [requestId]); - const deleteRequest = () => { - apiRequest('/request/update-request', { - method: 'PUT', - data: { - user_id: localStorage.getItem('id'), - request_id: requestId, - status: 0, - } - }).then((res) => { - navigate('/profile/requests'); - }) - }; + const deleteRequest = () => { + apiRequest("/request/update-request", { + method: "PUT", + data: { + user_id: localStorage.getItem("id"), + request_id: requestId, + status: 0, + }, + }).then((res) => { + navigate("/profile/requests"); + }); + }; - const [requestInfo, setRequestInfo] = useState({}) - const [loader, setLoader] = useState(false) - const [levels] = useState({ - 1: "Junior", - 2: "Middle", - 3: "Middle+", - 4: "Senior", - }) - return ( -
    - - -
    - -

    Страница заявки

    - {loader && } - {!loader && - <> -
    -

    {requestInfo.title}

    -
    - Редактировать - delete deleteRequest()}/> -
    -
    -
    -
    el.id === requestId) - 1]?.id ? 'partnerBid__switcher__prev switchDate' : 'partnerBid__switcher__prev switchDate disable'} - onClick={() => { - dispatch(setPartnerRequestId(partnerRequests[partnerRequests.findIndex(el => el.id === requestId) - 1].id)) - }} - > - arrow -
    -

    Дата заявки : {getCorrectDate(requestInfo.created_at)}

    -
    el.id === requestId) + 1]?.id ? 'partnerBid__switcher__next switchDate' : 'partnerBid__switcher__next switchDate disable'} - onClick={() => { - dispatch(setPartnerRequestId(partnerRequests[partnerRequests.findIndex(el => el.id === requestId) + 1].id)) - }} - > - arrow -
    -
    - - } - {Boolean(Object.keys(requestInfo).length) && !loader && - <> -
    - - - - - - - - - - - - - - - - - -

    Требования к стеку разработчика

    Квалификация

    -

    - {requestInfo.position.name}.   - {requestInfo.skills.map((skill, index) => { - return {skill.name} - {requestInfo.skills.length > index + 1 ? ',' : '.'} -   - - })} -

    -
    -
    -
    - backEndImg -
    -

    {requestInfo.position.name}

    -
    -
    -

    - {requestInfo.descr} -

    -
    -
    -
    - middleImg -
    -

    {requestInfo.level}

    -
    -
    -
    -
    -
    -

    Подходящие сотрудники по запросу

    -
    -
    - {requestInfo.result_profiles.length && requestInfo.result_profiles.map((person, index) => { - return
    - avatar -

    {person.fio} - {person.position_title}, {levels[person.level]}

    - - Подробнее - -
    - }) - } -
    -
    - - } -
    -