Rev 3694 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react';import { useDispatch } from 'react-redux';import { Box, Button, Chip, Grid, Typography } from '@mui/material';import Email from '@mui/icons-material/Email';import Visibility from '@mui/icons-material/Visibility';import { axios, parse } from '@utils';import { addNotification } from '@store/notification/notification.actions';import Widget from '@components/UI/Widget';export default function JobCard({job: {company_uuid: companyUuid,company_image: companyImage,job_uuid: jobUuid,job_title: jobTitle,job_description: jobDescription,total_applications: totalApplications,location,employment_type: employmentType,last_date_of_application: lastDateOfApplication,job_category: jobCategory,timeElapsed,job_skills: jobSkills,job_visits: jobVisits,job_save_operation: jobSaveOperation,company_name: companyName}}) {const [isJobSaved, setIsJobSaved] = useState(false);const dispatch = useDispatch();const handleClickFollow = () => {setIsJobSaved(!isJobSaved);likeHandler();};const likeHandler = () => {axios.post(`/job/${isJobSaved ? 'remove-' : ''}save-job/${jobUuid}`).then((response) => {const { success } = response.data;if (!success) {setIsJobSaved((currentState) => !currentState);dispatch(addNotification({style: 'danger',msg: 'Ha ocurrido un error, por favor intente más tarde'}));}});};useEffect(() => {setIsJobSaved(jobSaveOperation !== 'job-save');}, [jobSaveOperation]);return (<Widget><Widget.Headeravatar={`/storage/type/company/code/${companyUuid}/${companyImage ? `filename/${companyImage}` : ''}`}title={companyName}subheader={timeElapsed}renderAction={() => (<Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}><Typography variant='overline'><Email />Solicitantes {totalApplications}</Typography><Typography variant='overline'><Visibility /> Visto {jobVisits}</Typography></Box>)}/><Widget.Body><Grid container><Grid><Typography variant='h2'>{jobTitle}</Typography><Typography variant='overline'>Ubicación: {location}</Typography><Typography variant='overline'>Última aplicación: {lastDateOfApplication}</Typography><Typography variant='overline'>Tipo de empleo: {employmentType}</Typography><Typography variant='overline'>Categoría: {jobCategory}</Typography><Typography>Descripción: {parse(jobDescription)}</Typography></Grid><Grid><Typography variant='overline'>Habilidades:</Typography>{jobSkills && !!jobSkills.length && (<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>{jobSkills.map((skill) => (<Chip key={skill} label={skill} />))}</Box>)}</Grid></Grid></Widget.Body><Widget.Actions><Button variant={isJobSaved ? 'secondary' : 'primary'} onClick={handleClickFollow}>{isJobSaved ? 'Dejar de seguir' : 'Guardar empleo'}</Button></Widget.Actions></Widget>);}