@krowdy-ui/views
Version:
React components that implement Google's Material Design.
656 lines (608 loc) • 24.9 kB
JavaScript
"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;