UNPKG

@krowdy-ui/views

Version:

React components that implement Google's Material Design.

656 lines (608 loc) • 24.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.styles = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _xdate = _interopRequireDefault(require("xdate")); var _core = require("@krowdy-ui/core"); var _Business = _interopRequireDefault(require("@material-ui/icons/Business")); var _styles = require("@krowdy-ui/styles"); var _clsx = _interopRequireDefault(require("clsx")); var _keyBy = _interopRequireDefault(require("../utils/keyBy")); var _icons = require("@krowdy-ui/icons"); var _excluded = ["children"]; var styles = function styles(theme) { var _contentJobDetail, _defaultBtnPostular, _titleJob; return { avatar: { backgroundColor: 'transparent', color: theme.palette.secondary[200], height: 26, width: 26 }, benefitList: (0, _defineProperty2["default"])({ display: 'grid', gap: theme.spacing(1), gridTemplateColumns: '1fr' }, theme.breakpoints.up('sm'), { gridTemplateColumns: '1fr 1fr' }), btnPostular: {}, chips: { '&:nth-last-child(1)': { marginRight: 0 }, margin: '5px 5px 5px 0', maxWidth: '100%' }, contentCompany: (0, _defineProperty2["default"])({ '& > a': { marginLeft: theme.spacing(1) }, alignItems: 'flex-end', display: 'flex' }, theme.breakpoints.down('xs'), { alignItems: 'center' }), contentCompanyLogo: { '& > img': { display: 'block', width: '100%' }, alignItems: 'center', backgroundColor: theme.palette.secondary[10] || '#F2F4F7', border: '1px solid rgb(234, 234, 234)', borderRadius: 6, display: 'flex', height: 47, justifyContent: 'center', width: 47 }, contentJobDetail: (_contentJobDetail = { '& > *': { margin: theme.spacing(2, 0) } }, (0, _defineProperty2["default"])(_contentJobDetail, theme.breakpoints.down('xs'), { marginLeft: theme.spacing(2), marginRight: theme.spacing(2), paddingBottom: theme.spacing(5) }), (0, _defineProperty2["default"])(_contentJobDetail, "backgroundColor", 'white'), (0, _defineProperty2["default"])(_contentJobDetail, "margin", theme.spacing(0, 5)), (0, _defineProperty2["default"])(_contentJobDetail, "padding", theme.spacing(1.5)), (0, _defineProperty2["default"])(_contentJobDetail, "width", '100%'), _contentJobDetail), contentOptions: { '& > div': { alignItems: 'center', color: theme.palette.primary.main, display: 'flex' }, display: 'flex', flexWrap: 'wrap' }, contentTitle: { display: 'flex' }, custom: { backgroundColor: 'white', bottom: 0, display: 'none', flex: '1 1 0', left: 0, position: 'fixed', right: 0, width: '100%', zIndex: 1 }, defaultBtnPostular: (_defaultBtnPostular = {}, (0, _defineProperty2["default"])(_defaultBtnPostular, theme.breakpoints.down('xs'), { backgroundColor: 'white', bottom: 0, flex: '1 1 0', left: 0, padding: theme.spacing(2), position: 'fixed', right: 0, width: '100%', zIndex: 1 }), (0, _defineProperty2["default"])(_defaultBtnPostular, '& button', (0, _defineProperty2["default"])({}, theme.breakpoints.down('xs'), { width: '100%' })), (0, _defineProperty2["default"])(_defaultBtnPostular, "alignItems", 'flex-end'), (0, _defineProperty2["default"])(_defaultBtnPostular, "display", 'flex'), (0, _defineProperty2["default"])(_defaultBtnPostular, "flex", '1 0 1'), (0, _defineProperty2["default"])(_defaultBtnPostular, "flexDirection", 'column'), _defaultBtnPostular), descriptionEmpty: { '& > img': { maxWidth: '100%' }, alignItems: 'center', display: 'flex', flexDirection: 'column' }, fixedCard: (0, _defineProperty2["default"])({}, theme.breakpoints.down('xs'), { '& $custom': { display: 'block' }, '& $defaultBtnPostular': { display: 'none' } }), gridDescription: { '@media (min-width: 767px)': { marginTop: theme.spacing(7.5) }, marginTop: theme.spacing(3.5) }, headerJob: (0, _defineProperty2["default"])({ display: 'flex', flexDirection: 'column' }, theme.breakpoints.up('sm'), { flexDirection: 'row' }), headerLeft: { flex: '1' }, iconCompany: { // color: '#595959' color: theme.palette.secondary[200] || '#99A9C2' }, iconDetail: { marginRight: theme.spacing(1) }, itemList: { '& > div': { fontWeight: 'normal', wordBreak: 'break-word' }, display: 'list-item', fontSize: '.8rem', fontWeight: 'bold', padding: theme.spacing(.75), wordBreak: 'break-word' }, itemOptions: { marginRight: theme.spacing(2.5), marginTop: theme.spacing(1) }, list: { display: 'block', listStyleType: 'disc', margin: 0, paddingLeft: theme.spacing(5) }, listCompetitions: { display: 'list-item', fontSize: '.8rem', fontWeight: 'normal', padding: theme.spacing(.75), wordBreak: 'break-word' }, listItem: { border: "1px solid ".concat(theme.palette.secondary[50]), borderRadius: theme.shape.borderRadius, padding: theme.spacing(1.5) }, listItemAvatar: { minWidth: 36 }, sectionInformation: { margin: theme.spacing(5, 0) }, seeMoreCompany: { color: theme.palette.primary.main, cursor: 'pointer', fontSize: '.8rem', marginLeft: theme.spacing(1.25) }, subTitle: { color: theme.palette.grey[600], fontSize: 10, marginTop: theme.spacing(1), textAlign: 'center', width: 145 }, svgIcon: { color: theme.palette.secondary[200] }, textDescription: { fontSize: '.8rem', marginTop: theme.spacing(1.5), wordBreak: 'break-word' }, textDetail: { fontSize: '.8rem' }, textEndJob: { fontSize: 12, marginTop: theme.spacing(.5), paddingRight: theme.spacing(.5) }, titleCompany: { '&.no-visible': { fontSize: '1rem' }, fontSize: '1.4rem', fontWeight: 'bold', lineHeight: 1, marginLeft: theme.spacing(1) }, titleJob: (_titleJob = { // '&:first-letter': { // textTransform: 'uppercase' // }, fontSize: '2.5rem' }, (0, _defineProperty2["default"])(_titleJob, theme.breakpoints.down('xs'), { fontSize: 44 }), (0, _defineProperty2["default"])(_titleJob, "wordBreak", 'break-word'), _titleJob), titleSection: { fontSize: '1.2rem' } }; }; exports.styles = styles; var Div = function Div(_ref) { var children = _ref.children, props = (0, _objectWithoutProperties2["default"])(_ref, _excluded); return /*#__PURE__*/_react["default"].createElement("div", props, children); }; var _ref5 = /*#__PURE__*/_react["default"].createElement(_core.Divider, null); var _ref7 = /*#__PURE__*/_react["default"].createElement("img", { alt: "without-description", src: "//s3.amazonaws.com/cdn.krowdy.com/media/images/empty-job.png" }); var _ref8 = /*#__PURE__*/_react["default"].createElement(_core.Typography, { align: "center", color: "info", variant: "body3" }, "Sin descripci\xF3n"); var _ref9 = /*#__PURE__*/_react["default"].createElement(_core.Divider, null); var _ref10 = /*#__PURE__*/_react["default"].createElement(_core.Divider, null); var JobDetail = function JobDetail(props) { var hiddenButton = props.hiddenButton, jobId = props.jobId, classes = props.classes, title = props.title, _props$competencies = props.competencies, competencies = _props$competencies === void 0 ? [] : _props$competencies, closed = props.closed, description = props.description, basicEdition = props.basicEdition, _props$benefits = props.benefits, benefits = _props$benefits === void 0 ? [] : _props$benefits, _props$userInJob = props.userInJob, userInJob = _props$userInJob === void 0 ? false : _props$userInJob, _props$company = props.company, company = _props$company === void 0 ? {} : _props$company, _props$detailJob = props.detailJob, detailJob = _props$detailJob === void 0 ? [] : _props$detailJob, expirationDate = props.expirationDate, _props$disabledPerson = props.disabledPerson; _props$disabledPerson = _props$disabledPerson === void 0 ? {} : _props$disabledPerson; var visibleDisabled = _props$disabledPerson.visible, acceptedDisabled = _props$disabledPerson.accepted, _props$requirements = props.requirements, requirements = _props$requirements === void 0 ? [] : _props$requirements, _props$onClickPostula = props.onClickPostulation, onClickPostulation = _props$onClickPostula === void 0 ? function () {} : _props$onClickPostula, onViewCompany = props.onViewCompany, _props$visibleInforma = props.visibleInformation, visibleInformation = _props$visibleInforma === void 0 ? false : _props$visibleInforma, variant = props.variant, fixedCard = props.fixedCard, fixedCardCustomComponent = props.fixedCardCustomComponent, _props$fixedCardCusto = props.fixedCardCustomStyle, fixedCardCustomStyle = _props$fixedCardCusto === void 0 ? {} : _props$fixedCardCusto, customTitleButton = props.customTitleButton, subTitle = props.subTitle, isPreview = props.isPreview, hiddenHeaderJob = props.hiddenHeaderJob; var _React$useState = _react["default"].useState(false), _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2), imageFailed = _React$useState2[0], setImageFailed = _React$useState2[1]; _react["default"].useEffect(function () { setImageFailed(false); }, [jobId]); var timeToDown, isFinalized; if (expirationDate) { var expDate = new _xdate["default"](expirationDate); // DEVUELVE 2019-12-29 10:38:20 var expDateFormat = new _xdate["default"](expDate.getFullYear(), expDate.getMonth(), expDate.getDate()); // DEVUELVE 2019-12-29 var today = new _xdate["default"](); // DEVUELVE 2019-12-30 10:38:20 var todayFormat = new _xdate["default"](today.getFullYear(), today.getMonth(), today.getDate()); // DEVUELVE 2019-12-30 timeToDown = todayFormat.diffDays(expDateFormat); isFinalized = expirationDate ? new _xdate["default"]().getTime() >= new _xdate["default"](Number(expirationDate)).getTime() : false; } var renderItemRequirement = function renderItemRequirement(requirement) { switch (requirement.title.toLowerCase()) { case 'carreras': return requirement.value.map(function (career, indexCareer) { return /*#__PURE__*/_react["default"].createElement(_core.Chip // className={classes.requirementsChip} , { className: classes.chips, color: "primary", key: "career-".concat(indexCareer), label: career, size: "small", variant: "outlined" }); }); case 'idioma': return requirement.value.map(function (idioma, indexIdioma) { return /*#__PURE__*/_react["default"].createElement(_core.Typography // className={classes.requirementsSubtitle} // component='span' , { key: "idioma-".concat(indexIdioma) }, idioma); }); default: return requirement.value; } }; var handleErrorImage = function handleErrorImage() { setImageFailed(true); }; var CustomComponent = _react["default"].useMemo(function () { return fixedCardCustomComponent ? fixedCardCustomComponent : 'div'; }, [fixedCardCustomComponent]); var iconByTitle = _react["default"].useMemo(function () { return (0, _keyBy["default"])([{ icon: /*#__PURE__*/_react["default"].createElement(_icons.LanguageThin, { className: classes.svgIcon }), title: 'Trabajo remoto' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.PayrollThin, { className: classes.svgIcon }), title: 'Planilla' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.AddCircleOutlinedThin, { className: classes.svgIcon }), title: 'Seguro de Salud' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.AccessTimeThin, { className: classes.svgIcon }), title: 'Horario flexible' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.ComputerThin, { className: classes.svgIcon }), title: 'Computadora' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.TrainingThin, { className: classes.svgIcon }), title: 'Capacitaciones' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.DressHookThin, { className: classes.svgIcon }), title: 'Vestimenta informal' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.DriveEtaOutlinedThin, { className: classes.svgIcon }), title: 'Estacionamiento' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.EmojiPeopleOutlinedThin, { className: classes.svgIcon }), title: 'Actividades recreativas' }, { icon: /*#__PURE__*/_react["default"].createElement(_icons.PetsOutlinedThin, { className: classes.svgIcon }), title: 'Empresa pet friendly' }], 'title'); }, [classes.svgIcon]); var ContainerRoot = _react["default"].useMemo(function () { return isPreview ? Div : _core.Paper; }, [isPreview]); var basicEditionFiltered = _react["default"].useMemo(function () { return !basicEdition ? null : basicEdition.filter(function (_ref2) { var visible = _ref2.visible, description = _ref2.description; return visible && description; }); }, [basicEdition]); var filteredBenefits = _react["default"].useMemo(function () { return benefits.filter(function (_ref3) { var title = _ref3.title; return title; }); }, [benefits]); return /*#__PURE__*/_react["default"].createElement(ContainerRoot, { className: classes.contentJobDetail, variant: variant }, !hiddenHeaderJob && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Grid, { container: true }, /*#__PURE__*/_react["default"].createElement(_core.Grid, { item: true, xs: 12 }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.headerJob }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.headerLeft }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.titleJob, variant: "h1" }, title)), !isPreview ? /*#__PURE__*/_react["default"].createElement("div", { className: (0, _clsx["default"])(fixedCard && classes.fixedCard) }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.defaultBtnPostular }, !hiddenButton && /*#__PURE__*/_react["default"].createElement(_core.Button, { color: "primary", disabled: isFinalized === undefined ? closed : isFinalized || closed, onClick: onClickPostulation, size: "large", variant: "contained" }, customTitleButton ? customTitleButton : closed || isFinalized ? 'Finalizado' : userInJob ? 'Ver postulación' : 'Postular'), subTitle ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.subTitle }, subTitle) : null, isFinalized === undefined ? null : timeToDown > 0 && timeToDown <= 14 ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.textEndJob, component: "span" }, "Finaliza ", "en ".concat(timeToDown, " d\xEDa").concat(timeToDown === 1 ? '' : 's'), ".") : timeToDown === 0 && !isFinalized ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.textEndJob, variant: "subtitle2" }, "Finaliza hoy") : null), /*#__PURE__*/_react["default"].createElement(CustomComponent, { className: classes.custom, style: fixedCardCustomStyle }, fixedCard)) : null))), /*#__PURE__*/_react["default"].createElement(_core.Grid, { item: true, xs: 12 }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.contentCompany }, /*#__PURE__*/_react["default"].createElement("div", { className: classes.contentCompanyLogo }, company.company_logo && visibleInformation && !imageFailed ? /*#__PURE__*/_react["default"].createElement("img", { alt: "company logo", onError: handleErrorImage, src: company.company_logo }) : /*#__PURE__*/_react["default"].createElement(_Business["default"], { className: classes.iconCompany })), !visibleInformation ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: "".concat(classes.titleCompany, " no-visible") }, "Confidencial") : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.titleCompany }, company.company_name), onViewCompany && !isPreview ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.seeMoreCompany, onClick: onViewCompany }, "Ver m\xE1s") : null))), description ? /*#__PURE__*/_react["default"].createElement(_core.Grid, { item: true }, (0, _typeof2["default"])(description) === 'object' ? description : /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.textDescription, component: "div", dangerouslySetInnerHTML: { __html: description }, variant: "body3" })) : null, /*#__PURE__*/_react["default"].createElement(_core.Grid, { className: classes.contentOptions, item: true, xs: 12 }, detailJob.map(function (_ref4, index) { var icon = _ref4.icon, text = _ref4.text; return /*#__PURE__*/_react["default"].createElement("div", { className: classes.itemOptions, key: "option-".concat(index) }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.iconDetail }, icon), /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.textDetail, color: "body", variant: "h6" }, text)); }))), filteredBenefits.length ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !hiddenHeaderJob && _ref5, /*#__PURE__*/_react["default"].createElement("section", { className: classes.sectionInformation }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.titleSection, variant: "h5" }, "Beneficios"), /*#__PURE__*/_react["default"].createElement(_core.List, { className: classes.benefitList }, filteredBenefits.map(function (_ref6, index) { var title = _ref6.title; return /*#__PURE__*/_react["default"].createElement(_core.ListItem, { className: classes.listItem, key: "benefit-".concat(index) }, /*#__PURE__*/_react["default"].createElement(_core.ListItemAvatar, { className: classes.listItemAvatar }, /*#__PURE__*/_react["default"].createElement(_core.Avatar, { className: classes.avatar }, iconByTitle[title] ? iconByTitle[title].icon : /*#__PURE__*/_react["default"].createElement(_icons.LanguageThin, { className: classes.svgIcon }))), /*#__PURE__*/_react["default"].createElement(_core.ListItemText, { primary: title, primaryTypographyProps: { variant: 'body2' } })); })))) : null, !basicEditionFiltered ? null : /*#__PURE__*/_react["default"].createElement(_core.Grid, { className: classes.gridDescription, item: true, xs: 12 }, basicEditionFiltered.length > 0 ? basicEditionFiltered.map(function (item, key) { return /*#__PURE__*/_react["default"].createElement("section", { className: classes.sectionInformation, key: "information-".concat(key) }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.titleSection, variant: "h4" }, item.title), item.description ? /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.textDescription, component: "div", dangerouslySetInnerHTML: { __html: item.description }, variant: "body2" }) : null); }) : hiddenHeaderJob ? null : /*#__PURE__*/_react["default"].createElement("div", { className: classes.descriptionEmpty }, _ref7, _ref8)), competencies.length ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, _ref9, /*#__PURE__*/_react["default"].createElement("section", { className: classes.sectionInformation }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.titleSection, variant: "h5" }, "Competencias"), /*#__PURE__*/_react["default"].createElement(_core.List, { className: classes.list }, competencies.map(function (competency, index) { return /*#__PURE__*/_react["default"].createElement(_core.ListItem, { className: classes.listCompetitions, key: "competency-".concat(index) }, competency.title); })))) : null, requirements.length || visibleDisabled ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, _ref10, /*#__PURE__*/_react["default"].createElement("section", { className: classes.sectionInformation }, /*#__PURE__*/_react["default"].createElement(_core.Typography, { className: classes.titleSection, variant: "h5" }, "Requerimientos"), /*#__PURE__*/_react["default"].createElement(_core.List, { className: classes.list }, requirements.map(function (requirement, index) { return /*#__PURE__*/_react["default"].createElement(_core.ListItem, { className: classes.itemList, key: "requirement-".concat(index) }, requirement.title, /*#__PURE__*/_react["default"].createElement("div", null, renderItemRequirement(requirement))); }), visibleDisabled ? /*#__PURE__*/_react["default"].createElement(_core.ListItem, { className: classes.itemList }, "Apto para discapacitados", /*#__PURE__*/_react["default"].createElement("div", null, acceptedDisabled ? 'Si' : 'No')) : null))) : null); }; process.env.NODE_ENV !== "production" ? JobDetail.propTypes = { basicEdition: _propTypes["default"].array, benefits: _propTypes["default"].array, /** * Override or extend the styles applied to the component. * See [CSS API](#css) below for more details. */ classes: _propTypes["default"].object, closed: _propTypes["default"].bool, company: _propTypes["default"].object, competencies: _propTypes["default"].array, customTitleButton: _propTypes["default"].string, description: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]), // _id detailJob: _propTypes["default"].array, disabledPerson: _propTypes["default"].object, expirationDate: _propTypes["default"].string, fixedCard: _propTypes["default"].node, fixedCardCustomComponent: _propTypes["default"].node, fixedCardCustomStyle: _propTypes["default"].object, hiddenButton: _propTypes["default"].bool, hiddenHeaderJob: _propTypes["default"].bool, isPreview: _propTypes["default"].bool, jobId: _propTypes["default"].string, onClickPostulation: _propTypes["default"].func, // status: PropTypes.string onViewCompany: _propTypes["default"].func, requirements: _propTypes["default"].array, subTitle: _propTypes["default"].string, title: _propTypes["default"].string, userInJob: _propTypes["default"].bool, variant: _propTypes["default"].string, visibleInformation: _propTypes["default"].bool } : void 0; JobDetail.muiName = 'JobDetail'; var _default = (0, _styles.withStyles)(styles, { name: 'KrowdyJobDetail' })(JobDetail); exports["default"] = _default;