2024-03-10 23:27:52 +03:00
|
|
|
|
import { getTheme } from "@table-library/react-table-library/baseline";
|
2024-03-10 23:28:39 +03:00
|
|
|
|
import { CompactTable } from "@table-library/react-table-library/compact";
|
2024-03-19 16:39:36 +03:00
|
|
|
|
import { usePagination } from "@table-library/react-table-library/pagination";
|
2024-03-10 23:27:52 +03:00
|
|
|
|
import { useSort } from "@table-library/react-table-library/sort";
|
2024-03-10 23:28:39 +03:00
|
|
|
|
import { useTheme } from "@table-library/react-table-library/theme";
|
|
|
|
|
import React, { useEffect, useState } from "react";
|
2024-03-10 19:45:20 +03:00
|
|
|
|
import { Link, Navigate } from "react-router-dom";
|
2024-03-10 23:28:39 +03:00
|
|
|
|
|
2024-03-10 23:27:52 +03:00
|
|
|
|
import { urlForLocal } from "@utils/helper";
|
2023-03-23 14:00:34 +03:00
|
|
|
|
|
2024-02-01 22:33:22 +03:00
|
|
|
|
import { apiRequest } from "@api/request";
|
|
|
|
|
|
2023-05-31 08:36:15 +03:00
|
|
|
|
import { Footer } from "@components/Common/Footer/Footer";
|
2024-02-02 18:44:11 +03:00
|
|
|
|
import { Loader } from "@components/Common/Loader/Loader";
|
2024-02-01 22:33:22 +03:00
|
|
|
|
import { Navigation } from "@components/Navigation/Navigation";
|
2023-05-31 08:36:15 +03:00
|
|
|
|
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
|
|
|
|
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
|
|
|
|
|
|
2024-03-10 23:28:39 +03:00
|
|
|
|
import rightArrow from "assets/icons/arrows/arrowRight.svg";
|
|
|
|
|
|
2024-03-10 23:27:52 +03:00
|
|
|
|
// import PartnerPersonCard from "@components/PartnerPersonCard/PartnerPersonCard";
|
|
|
|
|
// import { useDispatch } from "react-redux";
|
|
|
|
|
// import { setPartnerEmployees } from "@redux/outstaffingSlice";
|
2024-02-01 22:32:55 +03:00
|
|
|
|
// 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";
|
2023-05-31 08:36:15 +03:00
|
|
|
|
import "./partnerСategories.scss";
|
2023-03-16 15:10:53 +03:00
|
|
|
|
|
2023-03-23 14:00:34 +03:00
|
|
|
|
export const PartnerCategories = () => {
|
2024-02-01 22:32:55 +03:00
|
|
|
|
// const dispatch = useDispatch();
|
2023-05-24 13:49:09 +03:00
|
|
|
|
if (localStorage.getItem("role_status") !== "18") {
|
|
|
|
|
return <Navigate to="/profile" replace />;
|
|
|
|
|
}
|
2023-03-16 15:10:53 +03:00
|
|
|
|
|
2024-02-02 18:44:11 +03:00
|
|
|
|
const [loader, setLoader] = useState(false);
|
2024-03-10 23:27:52 +03:00
|
|
|
|
const theme = useTheme(getTheme());
|
2024-03-10 23:28:39 +03:00
|
|
|
|
const [nodes, setNodes] = useState([]);
|
|
|
|
|
const [initialNodes, setInitialNodes] = useState([]);
|
2024-03-10 23:27:52 +03:00
|
|
|
|
|
2024-03-10 23:28:39 +03:00
|
|
|
|
const [search, setSearch] = useState("");
|
2024-03-10 23:27:52 +03:00
|
|
|
|
|
|
|
|
|
const COLUMNS = [
|
|
|
|
|
{
|
2024-04-05 16:11:46 +03:00
|
|
|
|
label: "",
|
2024-03-10 23:28:39 +03:00
|
|
|
|
renderCell: (item) => (
|
|
|
|
|
<img
|
|
|
|
|
className="table__avatar"
|
|
|
|
|
src={urlForLocal(item?.employee.avatar)}
|
|
|
|
|
alt="avatar"
|
|
|
|
|
/>
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: "ФИО",
|
2024-04-05 16:11:46 +03:00
|
|
|
|
renderCell: (item) => <p>{item?.employee.fio}</p>,
|
2024-03-10 23:28:39 +03:00
|
|
|
|
sort: { sortKey: "NAME" }
|
2024-03-10 23:27:52 +03:00
|
|
|
|
},
|
2024-03-10 23:28:39 +03:00
|
|
|
|
{
|
|
|
|
|
label: "Резюме",
|
2024-03-15 18:18:10 +03:00
|
|
|
|
renderCell: (item) => (
|
2024-03-15 18:19:48 +03:00
|
|
|
|
<Link className="table__link" to={`/candidate/${item.user_id}`}>
|
2024-03-15 18:18:10 +03:00
|
|
|
|
Резюме
|
2024-04-05 16:11:46 +03:00
|
|
|
|
<div className="img__wrapper">
|
|
|
|
|
<img src={rightArrow} alt="arrow" />
|
|
|
|
|
</div>
|
2024-03-15 18:18:10 +03:00
|
|
|
|
</Link>
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
{
|
2024-04-05 16:11:46 +03:00
|
|
|
|
label: "Отчетность",
|
2024-03-10 23:28:39 +03:00
|
|
|
|
renderCell: (item) => (
|
|
|
|
|
<Link
|
|
|
|
|
className="table__link"
|
|
|
|
|
to={`/profile/employees/report/${item.user_id}`}
|
|
|
|
|
>
|
|
|
|
|
Подробный отчет
|
2024-04-05 16:11:46 +03:00
|
|
|
|
<div className="img__wrapper">
|
2024-03-10 23:28:39 +03:00
|
|
|
|
<img src={rightArrow} alt="arrow" />
|
|
|
|
|
</div>
|
|
|
|
|
</Link>
|
|
|
|
|
)
|
|
|
|
|
}
|
2024-03-10 23:27:52 +03:00
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
let data = { nodes };
|
|
|
|
|
|
|
|
|
|
const sort = useSort(
|
|
|
|
|
data,
|
|
|
|
|
{
|
2024-03-10 23:28:39 +03:00
|
|
|
|
onChange: onSortChange
|
2024-03-10 23:27:52 +03:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
sortFns: {
|
2024-03-10 23:28:39 +03:00
|
|
|
|
NAME: (array) =>
|
|
|
|
|
array.sort((a, b) => a.employee.fio.localeCompare(b.employee.fio))
|
|
|
|
|
}
|
2024-03-10 23:27:52 +03:00
|
|
|
|
}
|
|
|
|
|
);
|
2024-02-01 22:32:55 +03:00
|
|
|
|
|
2024-03-19 16:39:00 +03:00
|
|
|
|
const pagination = usePagination(data, {
|
|
|
|
|
state: {
|
|
|
|
|
page: 0,
|
2024-04-05 16:11:46 +03:00
|
|
|
|
size: 10
|
2024-03-19 16:39:00 +03:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2024-02-01 22:32:55 +03:00
|
|
|
|
useEffect(() => {
|
2024-02-02 18:44:11 +03:00
|
|
|
|
setLoader(true);
|
2024-02-01 22:32:55 +03:00
|
|
|
|
apiRequest("/project/my-employee").then((el) => {
|
2024-02-02 18:44:11 +03:00
|
|
|
|
setLoader(false);
|
2024-03-10 23:27:52 +03:00
|
|
|
|
setNodes(el?.managerEmployees);
|
|
|
|
|
setInitialNodes(el.managerEmployees);
|
2024-02-01 22:33:22 +03:00
|
|
|
|
});
|
|
|
|
|
}, []);
|
2024-02-01 22:32:55 +03:00
|
|
|
|
|
2024-03-10 23:27:52 +03:00
|
|
|
|
const handleSearch = (event) => {
|
|
|
|
|
setSearch(event.target.value);
|
2024-03-10 23:28:39 +03:00
|
|
|
|
setNodes(
|
|
|
|
|
initialNodes.filter((item) =>
|
|
|
|
|
item.employee.fio
|
|
|
|
|
.toLowerCase()
|
|
|
|
|
.includes(event.target.value.toLowerCase())
|
|
|
|
|
)
|
|
|
|
|
);
|
2024-03-10 23:27:52 +03:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function onSortChange(action, state) {
|
|
|
|
|
console.log(action, state);
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-01 22:32:55 +03:00
|
|
|
|
// 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
|
|
|
|
|
// }
|
|
|
|
|
// ]);
|
2023-03-23 14:00:34 +03:00
|
|
|
|
|
2024-02-01 22:32:55 +03:00
|
|
|
|
// 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
|
|
|
|
|
// }
|
|
|
|
|
// ]);
|
2023-05-24 13:49:09 +03:00
|
|
|
|
return (
|
2024-02-09 18:17:15 +03:00
|
|
|
|
<div className="partner-categories">
|
2023-05-24 13:49:09 +03:00
|
|
|
|
<ProfileHeader />
|
|
|
|
|
<Navigation />
|
|
|
|
|
<div className="container">
|
|
|
|
|
<ProfileBreadcrumbs
|
|
|
|
|
links={[
|
|
|
|
|
{ name: "Главная", link: "/profile" },
|
2024-02-02 18:43:52 +03:00
|
|
|
|
{ name: "Данные моего персонала", link: "/profile/employees" }
|
2023-05-24 13:49:09 +03:00
|
|
|
|
]}
|
|
|
|
|
/>
|
2024-02-09 18:17:15 +03:00
|
|
|
|
<h2 className="partner-categories__title">Данные персонала</h2>
|
2024-02-02 18:44:11 +03:00
|
|
|
|
{loader ? (
|
|
|
|
|
<Loader style={"green"} height={80} width={80} />
|
|
|
|
|
) : (
|
2024-02-09 18:17:15 +03:00
|
|
|
|
<div className="partner-categories__items">
|
2024-03-10 23:27:52 +03:00
|
|
|
|
{Boolean(initialNodes.length) ? (
|
|
|
|
|
<>
|
2024-03-10 23:28:39 +03:00
|
|
|
|
<label className="table__search" htmlFor="search">
|
2024-03-10 23:27:52 +03:00
|
|
|
|
Поиск по имени:
|
2024-03-10 23:28:39 +03:00
|
|
|
|
<input
|
|
|
|
|
id="search"
|
|
|
|
|
type="text"
|
|
|
|
|
value={search}
|
2024-04-05 16:11:46 +03:00
|
|
|
|
placeholder="Поиск по сотрудникам"
|
2024-03-10 23:28:39 +03:00
|
|
|
|
onChange={handleSearch}
|
|
|
|
|
/>
|
2024-03-10 23:27:52 +03:00
|
|
|
|
</label>
|
2024-03-10 23:28:39 +03:00
|
|
|
|
<CompactTable
|
|
|
|
|
columns={COLUMNS}
|
|
|
|
|
data={data}
|
|
|
|
|
theme={theme}
|
|
|
|
|
sort={sort}
|
2024-03-19 16:39:00 +03:00
|
|
|
|
pagination={pagination}
|
2024-03-10 23:28:39 +03:00
|
|
|
|
/>
|
2024-03-19 16:39:00 +03:00
|
|
|
|
<div className="table__pagination">
|
2024-04-05 16:11:46 +03:00
|
|
|
|
<button
|
|
|
|
|
className={
|
|
|
|
|
pagination.state.page === 0 ? "switch disable" : "switch"
|
|
|
|
|
}
|
|
|
|
|
type="button"
|
|
|
|
|
disabled={pagination.state.page === 0}
|
|
|
|
|
onClick={() =>
|
|
|
|
|
pagination.fns.onSetPage(pagination.state.page - 1)
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
{"<"}
|
|
|
|
|
</button>
|
2024-03-19 16:39:00 +03:00
|
|
|
|
<span className="table__pages">
|
|
|
|
|
{pagination.state.getPages(data.nodes).map((_, index) => (
|
|
|
|
|
<button
|
|
|
|
|
key={index}
|
|
|
|
|
type="button"
|
2024-04-05 16:11:46 +03:00
|
|
|
|
className={
|
|
|
|
|
pagination.state.page === index
|
|
|
|
|
? "page page--active "
|
|
|
|
|
: "page"
|
|
|
|
|
}
|
2024-03-19 16:39:00 +03:00
|
|
|
|
onClick={() => pagination.fns.onSetPage(index)}
|
|
|
|
|
>
|
|
|
|
|
{index + 1}
|
|
|
|
|
</button>
|
|
|
|
|
))}
|
|
|
|
|
</span>
|
2024-04-05 16:11:46 +03:00
|
|
|
|
<button
|
|
|
|
|
className={
|
|
|
|
|
pagination.state.page + 1 ===
|
|
|
|
|
pagination.state.getPages(data.nodes).length
|
|
|
|
|
? "switch disable"
|
|
|
|
|
: "switch"
|
|
|
|
|
}
|
|
|
|
|
type="button"
|
|
|
|
|
disabled={
|
|
|
|
|
pagination.state.page + 1 ===
|
|
|
|
|
pagination.state.getPages(data.nodes).length
|
|
|
|
|
}
|
|
|
|
|
onClick={() =>
|
|
|
|
|
pagination.fns.onSetPage(pagination.state.page + 1)
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
{">"}
|
|
|
|
|
</button>
|
2024-03-19 16:39:00 +03:00
|
|
|
|
</div>
|
2024-03-10 23:27:52 +03:00
|
|
|
|
</>
|
2024-02-09 17:59:19 +03:00
|
|
|
|
) : (
|
2024-03-10 19:45:20 +03:00
|
|
|
|
<div className="partner-categories__empty">
|
|
|
|
|
У вас нет нанятого персонала, разместите вашу <br /> первую
|
|
|
|
|
вакансию на вкладке{" "}
|
|
|
|
|
<Link to={`/profile/requests`}>
|
|
|
|
|
<b>Мои вакансии</b>
|
|
|
|
|
</Link>
|
|
|
|
|
</div>
|
2024-02-09 17:59:19 +03:00
|
|
|
|
)}
|
2024-02-02 18:43:52 +03:00
|
|
|
|
{/*{personalInfoItems.map((item, index) => {*/}
|
|
|
|
|
{/* return (*/}
|
|
|
|
|
{/* <Link*/}
|
|
|
|
|
{/* to={item.link}*/}
|
|
|
|
|
{/* key={index}*/}
|
|
|
|
|
{/* className={*/}
|
|
|
|
|
{/* item.available*/}
|
2024-02-09 18:17:15 +03:00
|
|
|
|
{/* ? "partner-categories__item item"*/}
|
|
|
|
|
{/* : "partner-categories__item item item__disable"*/}
|
2024-02-02 18:43:52 +03:00
|
|
|
|
{/* }*/}
|
|
|
|
|
{/* 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 && (*/}
|
2024-02-09 18:17:15 +03:00
|
|
|
|
{/* <div className="item__disable-hover">*/}
|
2024-02-02 18:43:52 +03:00
|
|
|
|
{/* <p>У вас нет персонала из категории</p>*/}
|
|
|
|
|
{/* <button>Подобрать</button>*/}
|
|
|
|
|
{/* </div>*/}
|
|
|
|
|
{/* )}*/}
|
|
|
|
|
{/* </Link>*/}
|
|
|
|
|
{/* );*/}
|
|
|
|
|
{/*})}*/}
|
|
|
|
|
</div>
|
2024-02-02 18:44:11 +03:00
|
|
|
|
)}
|
2023-05-24 13:49:09 +03:00
|
|
|
|
</div>
|
|
|
|
|
<Footer />
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|