@krowdy-ui/views
Version:
React components that implement Google's Material Design.
403 lines (381 loc) • 13.6 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import React from 'react';
import PropTypes from 'prop-types';
import { Paper, makeStyles, Typography, Divider, Dot, Avatar, Button } from '@krowdy-ui/core';
import { Grade as GradeIcon, TrendingUp as TrendingUpIcon, Work as WorkIcon, Business as BusinessIcon, Loop as LoopIcon, AttachMoney as AttachMoneyIcon, School as SchoolIcon } from '@material-ui/icons';
import clsx from 'clsx';
import dayjs from 'dayjs';
import 'dayjs/locale/es';
var legendDegree = {
Doctorado: 4,
Master: 3,
Secundaria: 0,
Técnico: 1,
Universitario: 2
};
var getEducation = function getEducation(educations) {
if (!educations.length) return null;
var parsedEducation = educations.map(function (education) {
return _extends({}, education, {
degree: legendDegree[education.degree]
});
}).sort(function (a, b) {
var n = b.degree - a.degree;
if (n !== 0) return n;
if (!b.endDate) return 1;
if (!a.endDate) return 1;
var o = dayjs(b.endDate).diff(dayjs(a.endDate));
if (o !== 0) return o;
if (!b.startDate) return 1;
if (!a.startDate) return 1;
return dayjs(b.startDate).diff(dayjs(a.startDate));
});
return parsedEducation[0];
};
var compare = function compare(a, b) {
if (b.workHere || dayjs(a.endDate).isBefore(b.endDate)) return 1;
return -1;
};
function sufix(number) {
if (number >= 12) {
var year = Math.floor(number / 12);
return "".concat(year, " ").concat(year > 1 ? 'años' : 'año');
}
return "".concat(number, " ").concat(number > 1 ? 'meses' : 'mes');
}
var Rating = function Rating(_ref) {
var rating = _ref.rating;
var classes = useStyles();
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.first
}, /*#__PURE__*/React.createElement(Typography, {
variant: "h6"
}, rating), /*#__PURE__*/React.createElement(GradeIcon, {
className: classes.rating,
color: "primary",
fontSize: "small"
})), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref3 = /*#__PURE__*/React.createElement(SchoolIcon, {
color: "primary",
fontSize: "small"
});
var Education = function Education(_ref2) {
var education = _ref2.education;
var classes = useStyles();
var interval = education.endDate ? dayjs().diff(dayjs(education.endDate), 'month') : null;
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement("div", {
className: classes.icon
}, _ref3), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, education.career, " | ", education.institutionName), /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, education.endDate ? "Hace ".concat(sufix(interval)) : 'A la fecha'))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref5 = /*#__PURE__*/React.createElement(TrendingUpIcon, {
color: "primary",
fontSize: "small"
});
var Ascent = function Ascent(_ref4) {
var count = _ref4.count,
time = _ref4.time;
var classes = useStyles();
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement("div", {
className: classes.icon
}, _ref5), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, count, " Ascenso", count > 1 ? 's' : ''), /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, "En ", sufix(time)))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref7 = /*#__PURE__*/React.createElement(WorkIcon, {
color: "primary",
fontSize: "small"
});
var Experience = function Experience(_ref6) {
var experience = _ref6.experience;
var classes = useStyles();
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement("div", {
className: classes.icon
}, _ref7), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, "Experiencia"), /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, sufix(experience)))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref9 = /*#__PURE__*/React.createElement(BusinessIcon, {
color: "primary",
fontSize: "small"
});
var WorkExperience = function WorkExperience(_ref8) {
var name = _ref8.name,
count = _ref8.count;
var classes = useStyles();
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement("div", {
className: classes.icon
}, _ref9), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, "Trabaja en ", name), /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, "Hace ", sufix(count)))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref11 = /*#__PURE__*/React.createElement(LoopIcon, {
color: "primary",
fontSize: "small"
});
var Rotation = function Rotation(_ref10) {
var count = _ref10.count,
time = _ref10.time;
var classes = useStyles();
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement("div", {
className: classes.icon
}, _ref11), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, "Rotaci\xF3n"), /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, count, " ve", count > 1 ? 'ces' : 'z', " cada ", sufix(time)))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref13 = /*#__PURE__*/React.createElement(AttachMoneyIcon, {
color: "primary",
fontSize: "small"
});
var SalaryText = function SalaryText(_ref12) {
var salaryText = _ref12.salaryText;
var classes = useStyles();
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement("div", {
className: classes.icon
}, _ref13), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, "Salario"), /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, salaryText))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var _ref15 = /*#__PURE__*/React.createElement(Dot, {
color: "primary"
});
var _ref16 = /*#__PURE__*/React.createElement(BusinessIcon, {
color: "primary",
fontSize: "small"
});
var Company = function Company(_ref14) {
var company = _ref14.company;
var imgUrl = company.imgUrl,
companyName = company.companyName,
workHere = company.workHere,
startDate = company.startDate,
endDate = company.endDate;
var classes = useStyles();
var interval = endDate ? dayjs(endDate).month() : dayjs().diff(dayjs(startDate), 'month');
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: clsx(classes.experience, workHere ? classes.left : classes.experienceLeft)
}, workHere ? _ref15 : null, /*#__PURE__*/React.createElement("div", {
className: classes.row
}, /*#__PURE__*/React.createElement(Avatar, {
className: classes.small,
src: imgUrl,
variant: "rounded"
}, companyName ? companyName.charAt(0) : _ref16), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
className: classes.title,
variant: "body1"
}, companyName), startDate ? /*#__PURE__*/React.createElement(Typography, {
className: classes.subtitle,
variant: "body1"
}, sufix(interval), " \u2022 ", dayjs(startDate).format('MMM YYYY'), " - ", endDate ? dayjs(endDate).format('MMM YYYY') : 'Actualidad') : null))), /*#__PURE__*/React.createElement(Divider, {
className: classes.divider
}));
};
var Profile = function Profile(_ref17) {
var name = _ref17.name,
rating = _ref17.rating,
ascent = _ref17.ascent,
experience = _ref17.experience,
workExperience = _ref17.workExperience,
rotation = _ref17.rotation,
salaryText = _ref17.salaryText,
action = _ref17.action,
_ref17$experiences = _ref17.experiences,
experiences = _ref17$experiences === void 0 ? [] : _ref17$experiences,
_ref17$educations = _ref17.educations,
educations = _ref17$educations === void 0 ? [] : _ref17$educations,
onCV = _ref17.onCV,
_ref17$slice = _ref17.slice,
slice = _ref17$slice === void 0 ? 2 : _ref17$slice;
var classes = useStyles();
var parsedExperiences = experiences.filter(function (_ref18) {
var jobPosition = _ref18.jobPosition;
return jobPosition;
}).sort(compare);
var difference = experiences.length - slice;
var education = getEducation(educations);
return /*#__PURE__*/React.createElement(Paper, {
className: classes.container,
variant: "outlined"
}, /*#__PURE__*/React.createElement("div", {
className: classes.contentTitle
}, /*#__PURE__*/React.createElement(Typography, {
className: classes.name,
variant: "h6"
}, name), action), rating ? /*#__PURE__*/React.createElement(Rating, {
rating: rating
}) : null, education ? /*#__PURE__*/React.createElement(Education, {
education: education
}) : null, ascent ? /*#__PURE__*/React.createElement(Ascent, {
count: ascent.count,
time: ascent.time
}) : null, rotation ? /*#__PURE__*/React.createElement(Rotation, {
count: rotation.count,
time: rotation.time
}) : null, experience ? /*#__PURE__*/React.createElement(Experience, {
experience: experience
}) : null, workExperience ? /*#__PURE__*/React.createElement(WorkExperience, {
count: workExperience.count,
name: workExperience.name
}) : null, salaryText ? /*#__PURE__*/React.createElement(SalaryText, {
salaryText: salaryText
}) : null, parsedExperiences ? (difference > 0 ? parsedExperiences.slice(0, slice) : parsedExperiences).map(function (company, index) {
return /*#__PURE__*/React.createElement(Company, {
company: company,
key: index
});
}) : null, difference > 0 ? /*#__PURE__*/React.createElement("div", {
className: classes.difference
}, /*#__PURE__*/React.createElement(Button, {
color: "inherit",
onClick: onCV
}, "+ ", difference, " experiencia", difference > 1 ? 's' : '')) : null);
};
var useStyles = makeStyles(function (theme) {
return {
container: {
display: 'flex',
flexDirection: 'column',
height: '100%',
overflow: 'hidden',
padding: theme.spacing(1),
width: '100%'
},
contentTitle: {
alignItems: 'center',
display: 'flex',
justifyContent: 'space-between',
width: '100%'
},
difference: {
color: theme.palette.grey[600],
display: 'flex',
flexDirection: 'row-reverse'
},
divider: {
backgroundColor: theme.palette.secondary[10],
marginLeft: -theme.spacing(1),
marginRight: -theme.spacing(1)
},
experience: {
alignItems: 'center',
display: 'flex',
flexDirection: 'row'
},
experienceLeft: {
marginLeft: theme.spacing(2.5)
},
first: {
alignItems: 'center',
display: 'flex',
flexDirection: 'row',
marginBottom: theme.spacing(2),
marginTop: theme.spacing(0.5)
},
icon: {
marginLeft: theme.spacing(1),
marginRight: theme.spacing(2)
},
left: {
marginLeft: theme.spacing(1.5)
},
name: {
color: theme.palette.secondary[600]
},
rating: {
marginLeft: theme.spacing(1)
},
row: {
alignItems: 'center',
display: 'flex',
flexDirection: 'row',
marginBottom: theme.spacing(0.5),
marginTop: theme.spacing(0.5)
},
small: {
height: theme.spacing(3),
marginLeft: theme.spacing(1),
marginRight: theme.spacing(1),
width: theme.spacing(3)
},
subtitle: {
color: theme.palette.grey[600]
},
title: {
color: theme.palette.grey[800]
}
};
}, {
name: 'Profile'
});
process.env.NODE_ENV !== "production" ? Profile.propTypes = {
action: PropTypes.node,
ascent: PropTypes.shape({
count: PropTypes.number,
time: PropTypes.number
}),
experience: PropTypes.number,
name: PropTypes.string.isRequired,
rating: PropTypes.number,
rotation: PropTypes.shape({
count: PropTypes.number,
time: PropTypes.number
}),
salaryText: PropTypes.string,
workExperience: PropTypes.shape({
count: PropTypes.number,
name: PropTypes.string
})
} : void 0;
export default Profile;