2021-11-30 16:00:58 +02:00
|
|
|
import React from 'react'
|
|
|
|
import OutsideClickHandler from 'react-outside-click-handler'
|
2023-01-16 15:24:08 +03:00
|
|
|
import {useDispatch, useSelector} from 'react-redux'
|
2021-11-30 16:00:58 +02:00
|
|
|
import {
|
|
|
|
selectItems,
|
|
|
|
selectedItems,
|
2023-02-07 18:38:23 +03:00
|
|
|
profiles,
|
2021-11-30 16:00:58 +02:00
|
|
|
} from '../../redux/outstaffingSlice'
|
|
|
|
|
2023-01-20 16:20:06 +03:00
|
|
|
import {apiRequest} from "../../api/request";
|
2021-11-30 16:00:58 +02:00
|
|
|
|
|
|
|
import './outstaffingBlock.scss'
|
|
|
|
|
2023-01-16 15:24:08 +03:00
|
|
|
|
|
|
|
const handlePositionClick = (
|
|
|
|
{
|
|
|
|
dispatch,
|
|
|
|
positionId,
|
|
|
|
isSelected,
|
|
|
|
onSelect,
|
|
|
|
apiRequest
|
|
|
|
}) => {
|
2021-11-30 16:00:58 +02:00
|
|
|
if (isSelected) {
|
2023-01-16 15:24:08 +03:00
|
|
|
apiRequest('/profile', {
|
2023-01-25 16:50:36 +03:00
|
|
|
params: {
|
|
|
|
limit: 1000
|
|
|
|
},
|
2021-11-30 16:00:58 +02:00
|
|
|
}).then((profileArr) => {
|
2023-01-25 16:50:36 +03:00
|
|
|
dispatch(profiles(profileArr));
|
2023-01-13 13:02:48 +03:00
|
|
|
dispatch(selectedItems([]));
|
2021-11-30 16:00:58 +02:00
|
|
|
onSelect(positionId)
|
|
|
|
})
|
|
|
|
} else {
|
2023-01-16 15:24:08 +03:00
|
|
|
apiRequest('/profile', {
|
|
|
|
params: {
|
|
|
|
limit: '1000',
|
2023-01-25 16:50:36 +03:00
|
|
|
position_id: positionId
|
|
|
|
},
|
|
|
|
}).then((res) => {
|
|
|
|
dispatch(profiles(res));
|
2023-01-13 13:02:48 +03:00
|
|
|
dispatch(selectedItems([]));
|
2021-11-30 16:00:58 +02:00
|
|
|
onSelect(positionId)
|
|
|
|
})
|
|
|
|
}
|
2023-01-13 13:02:48 +03:00
|
|
|
};
|
2021-11-30 16:00:58 +02:00
|
|
|
|
2023-01-16 15:24:08 +03:00
|
|
|
const OutstaffingBlock = (
|
|
|
|
{
|
|
|
|
dataTags = [],
|
|
|
|
selected,
|
|
|
|
img,
|
|
|
|
header,
|
|
|
|
positionId,
|
|
|
|
isSelected,
|
|
|
|
onSelect
|
|
|
|
}) => {
|
2021-11-30 16:00:58 +02:00
|
|
|
|
2023-01-13 13:02:48 +03:00
|
|
|
|
|
|
|
const dispatch = useDispatch();
|
2021-11-30 16:00:58 +02:00
|
|
|
|
2023-01-13 13:02:48 +03:00
|
|
|
const itemsArr = useSelector(selectItems);
|
2021-11-30 16:00:58 +02:00
|
|
|
|
2023-01-16 15:24:08 +03:00
|
|
|
|
2021-11-30 16:00:58 +02:00
|
|
|
const handleBlockClick = (item, id) => {
|
|
|
|
if (!itemsArr.find((el) => item === el.value)) {
|
2023-01-16 15:24:08 +03:00
|
|
|
dispatch(selectedItems([...itemsArr, {id, value: item, label: item}]))
|
2021-11-30 16:00:58 +02:00
|
|
|
}
|
2023-01-13 13:02:48 +03:00
|
|
|
};
|
2021-11-30 16:00:58 +02:00
|
|
|
|
2023-01-13 13:02:48 +03:00
|
|
|
let classes;
|
2021-11-30 16:00:58 +02:00
|
|
|
|
|
|
|
dataTags.forEach((el) => {
|
|
|
|
if (el.name === 'skills_back') {
|
|
|
|
classes = 'back'
|
|
|
|
} else if (el.name === 'skills_design') {
|
|
|
|
classes = 'des'
|
|
|
|
} else if (el.name === 'skills_front') {
|
|
|
|
classes = 'front'
|
|
|
|
}
|
2023-01-13 13:02:48 +03:00
|
|
|
});
|
2021-11-30 16:00:58 +02:00
|
|
|
|
|
|
|
return (
|
2023-02-07 18:38:23 +03:00
|
|
|
<OutsideClickHandler onOutsideClick={() => isSelected && onSelect(null)}>
|
|
|
|
<div className={`outstaffing-block${isSelected ? ' outstaffing-block__selected' : ''}`}>
|
|
|
|
<div className={`outstaffing-block__img ${selected ? ' outstaffing-block__border' : ''}`}
|
|
|
|
onClick={() => handlePositionClick(
|
|
|
|
{
|
|
|
|
dispatch,
|
|
|
|
positionId,
|
|
|
|
isSelected,
|
|
|
|
onSelect,
|
|
|
|
apiRequest
|
|
|
|
})
|
|
|
|
}>
|
2023-01-16 15:24:08 +03:00
|
|
|
<h3>{header}</h3>
|
|
|
|
<img className={classes} src={img} alt='img'/>
|
|
|
|
</div>
|
2023-02-07 18:38:23 +03:00
|
|
|
<div className={`${selected ? 'outstaffing-block__mobile--block' : 'outstaffing-block__mobile--none'}`} >
|
2023-01-16 15:24:08 +03:00
|
|
|
<p className='outstaffing-block__text'># Популярный стек</p>
|
|
|
|
{dataTags && (
|
|
|
|
<ul className='outstaffing-block__items'>
|
|
|
|
{dataTags.map((item) => (
|
|
|
|
<li
|
|
|
|
key={item.id}
|
|
|
|
onClick={() => handleBlockClick(item.value, item.id)}
|
|
|
|
>
|
|
|
|
{item.value}
|
|
|
|
</li>
|
|
|
|
))}
|
|
|
|
</ul>
|
|
|
|
)}
|
|
|
|
</div>
|
2021-11-30 16:00:58 +02:00
|
|
|
</div>
|
2023-01-16 15:24:08 +03:00
|
|
|
</OutsideClickHandler>
|
2021-11-30 16:00:58 +02:00
|
|
|
)
|
2023-01-13 13:02:48 +03:00
|
|
|
};
|
2021-11-30 16:00:58 +02:00
|
|
|
|
|
|
|
export default OutstaffingBlock
|