UNPKG

@krowdy-ui/views

Version:

React components that implement Google's Material Design.

421 lines (388 loc) 15.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _core = require("@krowdy-ui/core"); var _icons = require("@material-ui/icons"); var _clsx = _interopRequireDefault(require("clsx")); var _dayjs = _interopRequireDefault(require("dayjs")); require("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 (0, _extends2["default"])({}, 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 = (0, _dayjs["default"])(b.endDate).diff((0, _dayjs["default"])(a.endDate)); if (o !== 0) return o; if (!b.startDate) return 1; if (!a.startDate) return 1; return (0, _dayjs["default"])(b.startDate).diff((0, _dayjs["default"])(a.startDate)); }); return parsedEducation[0]; }; var compare = function compare(a, b) { if (b.workHere || (0, _dayjs["default"])(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["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.first }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { variant: "h6" }, rating), /*#__PURE__*/_react["default"].createElement(_icons.Grade, { className: classes.rating, color: "primary", fontSize: "small" })), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref3 = /*#__PURE__*/_react["default"].createElement(_icons.School, { color: "primary", fontSize: "small" }); var Education = function Education(_ref2) { var education = _ref2.education; var classes = useStyles(); var interval = education.endDate ? (0, _dayjs["default"])().diff((0, _dayjs["default"])(education.endDate), 'month') : null; return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.icon }, _ref3), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, education.career, " | ", education.institutionName), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, education.endDate ? "Hace ".concat(sufix(interval)) : 'A la fecha'))), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref5 = /*#__PURE__*/_react["default"].createElement(_icons.TrendingUp, { color: "primary", fontSize: "small" }); var Ascent = function Ascent(_ref4) { var count = _ref4.count, time = _ref4.time; var classes = useStyles(); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.icon }, _ref5), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, count, " Ascenso", count > 1 ? 's' : ''), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, "En ", sufix(time)))), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref7 = /*#__PURE__*/_react["default"].createElement(_icons.Work, { color: "primary", fontSize: "small" }); var Experience = function Experience(_ref6) { var experience = _ref6.experience; var classes = useStyles(); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.icon }, _ref7), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, "Experiencia"), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, sufix(experience)))), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref9 = /*#__PURE__*/_react["default"].createElement(_icons.Business, { color: "primary", fontSize: "small" }); var WorkExperience = function WorkExperience(_ref8) { var name = _ref8.name, count = _ref8.count; var classes = useStyles(); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.icon }, _ref9), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, "Trabaja en ", name), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, "Hace ", sufix(count)))), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref11 = /*#__PURE__*/_react["default"].createElement(_icons.Loop, { color: "primary", fontSize: "small" }); var Rotation = function Rotation(_ref10) { var count = _ref10.count, time = _ref10.time; var classes = useStyles(); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.icon }, _ref11), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, "Rotaci\xF3n"), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, count, " ve", count > 1 ? 'ces' : 'z', " cada ", sufix(time)))), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref13 = /*#__PURE__*/_react["default"].createElement(_icons.AttachMoney, { color: "primary", fontSize: "small" }); var SalaryText = function SalaryText(_ref12) { var salaryText = _ref12.salaryText; var classes = useStyles(); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.icon }, _ref13), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, "Salario"), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, salaryText))), /*#__PURE__*/_react["default"].createElement(_core.Divider, { className: classes.divider })); }; var _ref15 = /*#__PURE__*/_react["default"].createElement(_core.Dot, { color: "primary" }); var _ref16 = /*#__PURE__*/_react["default"].createElement(_icons.Business, { 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 ? (0, _dayjs["default"])(endDate).month() : (0, _dayjs["default"])().diff((0, _dayjs["default"])(startDate), 'month'); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { className: (0, _clsx["default"])(classes.experience, workHere ? classes.left : classes.experienceLeft) }, workHere ? _ref15 : null, /*#__PURE__*/_react["default"].createElement("div", { className: classes.row }, /*#__PURE__*/_react["default"].createElement(_core.Avatar, { className: classes.small, src: imgUrl, variant: "rounded" }, companyName ? companyName.charAt(0) : _ref16), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.title, variant: "body1" }, companyName), startDate ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subtitle, variant: "body1" }, sufix(interval), " \u2022 ", (0, _dayjs["default"])(startDate).format('MMM YYYY'), " - ", endDate ? (0, _dayjs["default"])(endDate).format('MMM YYYY') : 'Actualidad') : null))), /*#__PURE__*/_react["default"].createElement(_core.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["default"].createElement(_core.Paper, { className: classes.container, variant: "outlined" }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.contentTitle }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.name, variant: "h6" }, name), action), rating ? /*#__PURE__*/_react["default"].createElement(Rating, { rating: rating }) : null, education ? /*#__PURE__*/_react["default"].createElement(Education, { education: education }) : null, ascent ? /*#__PURE__*/_react["default"].createElement(Ascent, { count: ascent.count, time: ascent.time }) : null, rotation ? /*#__PURE__*/_react["default"].createElement(Rotation, { count: rotation.count, time: rotation.time }) : null, experience ? /*#__PURE__*/_react["default"].createElement(Experience, { experience: experience }) : null, workExperience ? /*#__PURE__*/_react["default"].createElement(WorkExperience, { count: workExperience.count, name: workExperience.name }) : null, salaryText ? /*#__PURE__*/_react["default"].createElement(SalaryText, { salaryText: salaryText }) : null, parsedExperiences ? (difference > 0 ? parsedExperiences.slice(0, slice) : parsedExperiences).map(function (company, index) { return /*#__PURE__*/_react["default"].createElement(Company, { company: company, key: index }); }) : null, difference > 0 ? /*#__PURE__*/_react["default"].createElement("div", { className: classes.difference }, /*#__PURE__*/_react["default"].createElement(_core.Button, { color: "inherit", onClick: onCV }, "+ ", difference, " experiencia", difference > 1 ? 's' : '')) : null); }; var useStyles = (0, _core.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["default"].node, ascent: _propTypes["default"].shape({ count: _propTypes["default"].number, time: _propTypes["default"].number }), experience: _propTypes["default"].number, name: _propTypes["default"].string.isRequired, rating: _propTypes["default"].number, rotation: _propTypes["default"].shape({ count: _propTypes["default"].number, time: _propTypes["default"].number }), salaryText: _propTypes["default"].string, workExperience: _propTypes["default"].shape({ count: _propTypes["default"].number, name: _propTypes["default"].string }) } : void 0; var _default = Profile; exports["default"] = _default;