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..1bedd6ab 100644 --- a/src/components/Description/Description.js +++ b/src/components/Description/Description.js @@ -1,143 +1,115 @@ -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' +import "./description.scss"; - -const Description = ({onLoadMore, isLoadingMore}) => { - - const candidatesListArr = useSelector(selectProfiles); +const Description = ({ onLoadMore, isLoadingMore }) => { + // const candidatesListArr = useSelector(selectProfiles); + const candidatesListArr = []; 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/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]}

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