react-cm-ui
Version:
React UI for Healthy Church
267 lines (219 loc) • 7.61 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _lodash = require("lodash");
var _classnames = _interopRequireDefault(require("classnames"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireDefault(require("react"));
var _telephoneLink = _interopRequireDefault(require("../telephoneLink"));
var _emailLink = _interopRequireDefault(require("../emailLink"));
var _makeStyles = _interopRequireDefault(require("../../styles/makeStyles"));
var _constants = require("../../global/constants");
var _typography = _interopRequireDefault(require("../typography"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var preferredMethodEnums = ['email', 'mail', 'none', 'phone', 'text-message', '', null];
var propTypes = {
/**
* Override or extend the styles applied to PersonContactInfo.
*/
classes: _propTypes["default"].shape({
root: _propTypes["default"].string
}),
email: _propTypes["default"].string,
emergencyContactEmail: _propTypes["default"].string,
emergencyContactPhone: _propTypes["default"].string,
emergencyContactPreferredMethod: _propTypes["default"].oneOf(preferredMethodEnums),
emergencyContactRelationshipName: _propTypes["default"].string,
/**
* The `id` of the PersonContactInfo.
*/
id: _propTypes["default"].string,
isDoNotContact: _propTypes["default"].bool,
isDoNotEmail: _propTypes["default"].bool,
isDoNotMail: _propTypes["default"].bool,
isDoNotPhone: _propTypes["default"].bool,
isDoNotText: _propTypes["default"].bool,
phone: _propTypes["default"].string,
preferredMethod: _propTypes["default"].oneOf(preferredMethodEnums),
recordType: _propTypes["default"].oneOf(['adult', 'child', 'student'])
};
var defaultProps = {
classes: null,
emergencyContactEmail: null,
emergencyContactPhone: null,
emergencyContactPreferredMethod: null,
emergencyContactRelationshipName: null,
email: null,
id: null,
isDoNotContact: false,
isDoNotEmail: false,
isDoNotMail: false,
isDoNotPhone: false,
isDoNotText: false,
phone: null,
preferredMethod: null,
recordType: 'adult'
};
var useStyles = (0, _makeStyles["default"])(function (theme) {
var palette = theme.palette;
return {
preferredContactMethod: {
color: palette.text.secondary
},
preferredContactInfo: {
fontWeight: theme.typography.fontWeightBold,
'& .ui.a': {
color: palette.text.link
}
},
root: {
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
maxWidth: '250px !important'
}
};
});
function PersonContactInfo(props) {
var emergencyContactEmail = props.emergencyContactEmail,
emergencyContactPhone = props.emergencyContactPhone,
emergencyContactPreferredMethod = props.emergencyContactPreferredMethod,
emergencyContactRelationshipName = props.emergencyContactRelationshipName,
id = props.id,
isDoNotContact = props.isDoNotContact,
isDoNotEmail = props.isDoNotEmail,
isDoNotMail = props.isDoNotMail,
isDoNotPhone = props.isDoNotPhone,
isDoNotText = props.isDoNotText,
preferredMethodProp = props.preferredMethod,
emailProp = props.email,
phoneProp = props.phone,
recordType = props.recordType;
var classes = useStyles(props);
var isChild = recordType === 'child';
var renderEmail = function renderEmail() {
var email = emailProp;
if (isChild && emergencyContactEmail) {
email = emergencyContactEmail;
}
if ((0, _lodash.isEmpty)(email)) {
return null;
}
if (email === 'N/A') {
return email;
}
return /*#__PURE__*/_react["default"].createElement(_emailLink["default"], {
email: email
});
};
var renderPhone = function renderPhone() {
var phone = phoneProp;
if (isChild && emergencyContactPhone) {
phone = emergencyContactPhone;
}
if ((0, _lodash.isEmpty)(phone)) {
return null;
}
if (phone === 'N/A') {
return phone;
}
return /*#__PURE__*/_react["default"].createElement(_telephoneLink["default"], {
number: phone
});
};
var contactMethodText = '';
var preferredContactInfoText = '';
var preferredMethod = preferredMethodProp;
if (isChild && emergencyContactPreferredMethod) {
preferredMethod = emergencyContactPreferredMethod;
}
if (isDoNotContact) {
contactMethodText = 'Do Not Contact This Individual';
} else {
switch (preferredMethod) {
case 'email':
if (isChild && emergencyContactEmail && emergencyContactRelationshipName) {
contactMethodText = "".concat(emergencyContactRelationshipName, "'s Email");
} else if (!isChild) {
contactMethodText = 'Prefers Email';
}
if (renderEmail()) {
preferredContactInfoText = renderEmail();
}
break;
case 'phone':
if (isChild && emergencyContactPhone && emergencyContactRelationshipName) {
contactMethodText = "".concat(emergencyContactRelationshipName, "'s Phone");
} else if (!isChild) {
contactMethodText = 'Prefers Phone';
}
if (renderPhone()) {
preferredContactInfoText = renderPhone();
}
break;
case 'text-message':
// eslint-disable-next-line no-case-declarations
var textNumber = phoneProp;
if (isChild && emergencyContactPhone) {
textNumber = emergencyContactPhone;
}
if (isChild && emergencyContactPhone && emergencyContactRelationshipName) {
contactMethodText = "".concat(emergencyContactRelationshipName, "'s Text");
} else if (!isChild) {
contactMethodText = 'Prefers Text';
}
if (phoneProp) {
preferredContactInfoText = textNumber;
}
break;
case 'mail':
case 'none':
default:
if (!isChild && renderPhone()) {
preferredContactInfoText = renderPhone();
} else if (!isChild && renderEmail()) {
preferredContactInfoText = renderEmail();
}
}
if (!isChild && (isDoNotEmail || isDoNotMail || isDoNotPhone || isDoNotText)) {
if (contactMethodText) {
contactMethodText += ', DNC via ';
} else {
contactMethodText = 'DNC via ';
}
if (isDoNotEmail) {
contactMethodText += 'Email, ';
}
if (isDoNotMail) {
contactMethodText += 'Mail, ';
}
if (isDoNotPhone) {
contactMethodText += 'Phone, ';
}
if (isDoNotText) {
contactMethodText += 'Text';
}
contactMethodText = (0, _lodash.trimEnd)(contactMethodText, ', ');
}
}
if (!contactMethodText) {
return null;
}
return /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])(_constants.PERSON_CONTACT_INFO_CLASSES, classes.root),
id: id
}, /*#__PURE__*/_react["default"].createElement(_typography["default"], {
className: classes.preferredContactMethod,
component: "h5",
variant: "h5"
}, "(".concat(contactMethodText, ")")), preferredContactInfoText && /*#__PURE__*/_react["default"].createElement(_typography["default"], {
className: classes.preferredContactInfo,
variant: "body2"
}, preferredContactInfoText));
}
PersonContactInfo.propTypes = propTypes;
PersonContactInfo.defaultProps = defaultProps;
var _default = PersonContactInfo;
exports["default"] = _default;