@ -6,6 +6,7 @@ import { useTheme } from "@table-library/react-table-library/theme";
import React , { useEffect , useState } from "react" ;
import { Link , Navigate } from "react-router-dom" ;
import { LEVELS , SKILLS } from "@utils/constants" ;
import { urlForLocal } from "@utils/helper" ;
import { apiRequest } from "@api/request" ;
@ -17,12 +18,26 @@ import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadc
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader" ;
import rightArrow from "assets/icons/arrows/arrowRight.svg" ;
import folder from "assets/icons/folder.svg" ;
import report from "assets/icons/report.svg" ;
// import PartnerPersonCard from "@components/PartnerPersonCard/PartnerPersonCard";
// import { useDispatch } from "react-redux";
// import { setPartnerEmployees } from "@redux/outstaffingSlice";
// import rightArrow from "assets/icons/arrows/arrowRight.svg";
// 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" ;
export const PartnerCategories = ( ) => {
// const dispatch = useDispatch();
if ( localStorage . getItem ( "role_status" ) !== "18" ) {
return < Navigate to = "/profile" replace / > ;
}
@ -31,7 +46,7 @@ export const PartnerCategories = () => {
const theme = useTheme ( getTheme ( ) ) ;
const [ nodes , setNodes ] = useState ( [ ] ) ;
const [ initialNodes , setInitialNodes ] = useState ( [ ] ) ;
const [ activeTab , setActiveTab ] = useState ( 0 ) ;
const [ activeTab , setActiveTab ] = useState ( "В с е " ) ;
const [ search , setSearch ] = useState ( "" ) ;
@ -65,24 +80,19 @@ export const PartnerCategories = () => {
< Link className = "table__info" to = { ` /profile/summary/ ${ item . user _id } ` } >
< p > { item ? . employee . fio } < / p >
< span >
{ item ? . employee . level _title } / { item ? . employee . position . name }
{ LEVELS [ item? . resume . userCard . level ] } / { " " }
{ SKILLS [ item ? . resume . userCard . position _id ] }
< / span >
< / Link >
)
// sort: { sortKey: "NAME" }
} ,
{
label : "Участвует в проекте" ,
renderCell : ( item ) => (
< div className = "table__project" >
{ item ? . employee . projects . length ? (
item . employee . projects . map ( ( project ) => {
return (
< div className = "table__project__item" key = { project . id } >
< img src = { folder } alt = "folder" / > { " " }
< p > { project . project . name } < / p >
< / div >
) ;
} )
{ item . resume . userCard . at _project ? (
< div > item . resume . userCard . at _ project< / div >
) : (
< span > Нет проектов < / span >
) }
@ -135,9 +145,23 @@ export const PartnerCategories = () => {
useEffect ( ( ) => {
setLoader ( true ) ;
apiRequest ( "/project/my-employee" ) . then ( ( el ) => {
setNodes ( el . managerEmployees ) ;
setInitialNodes ( el . managerEmployees ) ;
const fetchResumes = async ( ) => {
const promises = el . managerEmployees . map ( async ( manager ) => {
const resume = await apiRequest ( ` /resume?userId= ${ manager . user _id } ` ) ;
return { ... manager , resume } ; // Возвращаем объект с добавленным ключом resume
} ) ;
try {
const updatedManagers = await Promise . all ( promises ) ;
setInitialNodes ( updatedManagers ) ;
setNodes ( updatedManagers ) ;
setLoader ( false ) ;
} catch ( error ) {
console . error ( "Ошибка при получении резюме:" , error ) ;
}
} ;
fetchResumes ( ) ;
} ) ;
} , [ ] ) ;
@ -156,6 +180,108 @@ export const PartnerCategories = () => {
console . log ( action , state ) ;
}
// const [personalInfoItems] = useState([
// {
// title: "Backend разработчики",
// link: "/profile/categories/employees",
// description:
// "Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
// available: true,
// img: BackEndImg
// },
// {
// title: "Frontend разработчики",
// link: "/profile/categories/employees",
// description:
// "Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
// available: true,
// img: FrontendImg
// },
// {
// title: "Архитектура проектов",
// link: "/profile/categories/employees",
// description: "Потоки данных ER ERP CRM CQRS UML BPMN",
// available: true,
// img: ArchitectureImg
// },
// {
// title: "Дизайн проектов",
// link: "/profile/categories/employees",
// description:
// "Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
// available: true,
// img: DesignImg
// },
// {
// title: "Тестирование проектов",
// link: "/profile/add-request",
// description: "SQL Postman TestRail Kibana Ручное тестирование",
// available: false,
// img: TestImg
// },
// {
// title: "Администрирование проектов",
// link: "/profile/add-request",
// description: "DevOps ELK Kubernetes Docker Bash Apache Oracle Git",
// available: false,
// img: AdminImg
// },
// {
// title: "Управление проектом",
// link: "/profile/add-request",
// description: "Scrum Kanban Agile Miro CustDev",
// available: false,
// img: ManageImg
// },
// {
// title: "Копирайтинг проектов",
// link: "/profile/add-request",
// description: "Теги Заголовок H1 Дескриптор Абзац Сценарий",
// available: false,
// img: CopyImg
// },
// {
// title: "Реклама и SMM",
// link: "/profile/add-request",
// description:
// "Java PHP Python C# React Vue.js NodeJs Golang Ruby JavaScript",
// available: false,
// img: SmmImg
// }
// ]);
// const [mokPersons] = useState([
// {
// personAvatar: avatarImg,
// name: "Макаренко Дмитрий",
// qualification: "PHP Backend - разработчик",
// level: "Middle",
// project: "Админка НВД Консалтинг",
// tasks_in_progress: 5,
// month_hours: 140,
// id: 1
// },
// {
// personAvatar: avatarImg,
// name: "Макаренко Дмитрий",
// qualification: "PHP Backend - разработчик",
// level: "Middle",
// project: "Админка НВД Консалтинг",
// tasks_in_progress: 5,
// month_hours: 140,
// id: 2
// },
// {
// personAvatar: avatarImg,
// name: "Макаренко Дмитрий",
// qualification: "PHP Backend - разработчик",
// level: "Middle",
// project: "Админка НВД Консалтинг",
// tasks_in_progress: 5,
// month_hours: 140,
// id: 3
// }
// ]);
return (
< div className = "partner-categories" >
< ProfileHeader / >
@ -187,11 +313,11 @@ export const PartnerCategories = () => {
< div className = "table__tabs" >
< div
onClick = { ( ) => {
setActiveTab ( 0 ) ;
setActiveTab ( "В с е " ) ;
setNodes ( initialNodes ) ;
} }
className = {
activeTab === 0
activeTab === "В с е "
? "table__tab table__tab--active"
: "table__tab"
}
@ -205,7 +331,8 @@ export const PartnerCategories = () => {
setActiveTab ( tab . name ) ;
setNodes (
initialNodes . filter (
( item ) => item . employee . position . id === tab . value
( item ) =>
item . resume . userCard . position _id === tab . value
)
) ;
} }
@ -228,14 +355,10 @@ export const PartnerCategories = () => {
sort = { sort }
pagination = { pagination }
/ >
{ Boolean ( nodes . length ) &&
pagination . state . getPages ( data . nodes ) . length > 1 && (
< div className = "table__pagination" >
< button
className = {
pagination . state . page === 0
? "switch disable"
: "switch"
pagination . state . page === 0 ? "switch disable" : "switch"
}
type = "button"
disabled = { pagination . state . page === 0 }
@ -246,9 +369,7 @@ export const PartnerCategories = () => {
{ "<" }
< / button >
< span className = "table__pages" >
{ pagination . state
. getPages ( data . nodes )
. map ( ( _ , index ) => (
{ pagination . state . getPages ( data . nodes ) . map ( ( _ , index ) => (
< button
key = { index }
type = "button"
@ -282,7 +403,6 @@ export const PartnerCategories = () => {
{ ">" }
< / button >
< / div >
) }
< / >
) : (
< div className = "partner-categories__empty" >
@ -293,6 +413,39 @@ export const PartnerCategories = () => {
< / Link >
< / div >
) }
{ /*{personalInfoItems.map((item, index) => {*/ }
{ /* return (*/ }
{ /* <Link*/ }
{ /* to={item.link}*/ }
{ /* key={index}*/ }
{ /* className={*/ }
{ /* item.available*/ }
{ /* ? "partner-categories__item item"*/ }
{ /* : "partner-categories__item item item__disable"*/ }
{ /* }*/ }
{ /* onClick={() => {*/ }
{ /* dispatch(setPartnerEmployees(mokPersons));*/ }
{ /* }}*/ }
{ /* >*/ }
{ /* <div className="item__title">*/ }
{ /* <img src={item.img} alt={item.title} />*/ }
{ /* <h4>{item.title}</h4>*/ }
{ /* </div>*/ }
{ /* <div className="item__info">*/ }
{ /* <p>{item.description}</p>*/ }
{ /* <div className="more">*/ }
{ /* <img src={rightArrow} alt="arrow" />*/ }
{ /* </div>*/ }
{ /* </div>*/ }
{ /* {!item.available && (*/ }
{ /* <div className="item__disable-hover">*/ }
{ /* <p>У вас нет персонала из категории</p>*/ }
{ /* <button>Подобрать</button>*/ }
{ /* </div>*/ }
{ /* )}*/ }
{ /* </Link>*/ }
{ /* );*/ }
{ /*})}*/ }
< / div >
) }
< / div >