Rev 7271 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from 'react'
import { axios } from '../../utils'
import { connect } from 'react-redux'
import { addNotification } from '../../redux/notification/notification.actions'
import parse from 'html-react-parser'
import styled from 'styled-components'
const StyledHeart = styled.a`
.heart.animate {
animation: heartBeatAnimation 0.2s linear;
}
@keyframes heartBeatAnimation {
0% {
transform: scale(1);
}
50% {
transform: scale(1.3);
}
100% {
transform: scale(1);
}
}
`
const Description = ({
jobId,
companyId,
companyImage,
jobTitle,
companyName,
timeElapsed,
location,
jobSaved,
lastDateOfApplication,
employmentType,
jobCategory,
jobDescription,
jobSkills,
totalApplications,
jobVisits,
addNotification, // redux destructuring
}) => {
const [animateHeart, setAnimateHeart] = useState(false)
const [isJobSaved, setIsJobSaved] = useState(jobSaved !== 'job-save')
const handleClickFollow = () => {
setAnimateHeart(true)
setIsJobSaved(!isJobSaved)
likeHandler()
}
const likeHandler = () => {
axios
.post(`/job/${isJobSaved ? 'remove-' : ''}save-job/${jobId}`)
.then(({ data: response }) => {
if (!response.success) {
setIsJobSaved((currentState) => !currentState)
addNotification({
style: 'danger',
msg: 'Ha ocurrido un error, por favor intente más tarde',
})
}
})
}
return (
<div className="description">
<div className="header">
<div className="usy-dt">
<img
style={{ width: '50px', height: 'auto' }}
src={`/storage/type/company/code/${companyId}/${
companyImage ? `filename/${companyImage}` : ''
}`}
alt=""
/>
<div className="usy-name">
<h3>{jobTitle}</h3>
<p>{companyName}</p>
<span>
<img src="/images/clock.png" alt="" />
Posteado hace {timeElapsed}
</span>
</div>
</div>
</div>
<div className="infoContainer">
<div className="descpContainer">
<ul className="locationContainer">
<li>
<img src="/images/icon9.png" alt="" />
<span>{location}</span>
</li>
</ul>
<ul className="likeContainer">
<li>
<StyledHeart
href="#"
title=""
className="btn-remove-saved-job"
onClick={(e) => {
e.preventDefault()
handleClickFollow()
}}
onAnimationEnd={() => setAnimateHeart(false)}
>
<i
className={`la la-heart${isJobSaved ? '' : '-o'} heart ${
animateHeart ? 'animate' : ''
}`}
style={{ color: '#53d690' }}
/>
</StyledHeart>
</li>
<li>
<span>Última aplicación : {lastDateOfApplication}</span>
</li>
</ul>
</div>
<div className="job_descp accountnone">
<ul className="job-dt">
<li>
<a href="#">{employmentType}</a>
</li>
<li>
<a href="#">{jobCategory}</a>
</li>
</ul>
<div className="show-read-more">{parse(jobDescription)}</div>
{jobSkills.length && (
<ul className="skill-tags">
{jobSkills.map((jobSkill, index) => (
<li key={index}>
<a href="#" title="">
{jobSkill}
</a>
</li>
))}
</ul>
)}
</div>
</div>
<div className="job-status-bar btm-line">
<ul className="d-inline-flex" style={{ gap: '.5rem' }}>
<li>
<i className="fa fa-address-card-o" />
<span>{`Solicitantes ${totalApplications}`}</span>
</li>
</ul>
<a>
<i className="fas fa-eye"></i>Visto {jobVisits}
</a>
</div>
</div>
)
}
const mapDispatchToProps = {
addNotification: (notification) => addNotification(notification),
}
export default connect(null, mapDispatchToProps)(Description)