UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

167 lines (131 loc) 6.21 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.EditableFieldMask = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal")); var _lodash = _interopRequireDefault(require("lodash.isnil")); var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps")); var _EditableField = require("./EditableField.css"); var _EditableField2 = _interopRequireDefault(require("./EditableField.Truncated")); var _Truncate = _interopRequireDefault(require("../Truncate")); var _EditableField3 = require("./EditableField.utils"); var _jsxRuntime = require("react/jsx-runtime"); var EditableFieldMask = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2.default)(EditableFieldMask, _React$Component); function EditableFieldMask() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; _this.valueRef = void 0; _this.setValueNode = function (node) { _this.valueRef = node; }; _this.handleValueKeyDown = function (event) { var _this$props = _this.props, name = _this$props.name, onValueKeyDown = _this$props.onValueKeyDown; onValueKeyDown({ event: event, name: name }); }; _this.handleValueBlur = function () { var valueNode = _this.valueRef; valueNode && valueNode.removeAttribute('tabindex'); }; return _this; } var _proto = EditableFieldMask.prototype; _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) { if (nextProps.maskTabIndex !== this.props.maskTabIndex) { return true; } if (!(0, _fastDeepEqual.default)(nextProps.fieldValue, this.props.fieldValue)) { return true; } return false; }; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { var _this$props2 = this.props, name = _this$props2.name, maskTabIndex = _this$props2.maskTabIndex; var valueNode = this.valueRef; if (prevProps.maskTabIndex !== maskTabIndex && maskTabIndex === name) { valueNode.setAttribute('tabindex', '0'); valueNode.focus(); } else if (prevProps.maskTabIndex === name && ((0, _lodash.default)(maskTabIndex) || maskTabIndex === prevProps.maskTabIndex)) { valueNode && valueNode.removeAttribute('tabindex'); valueNode.blur(); } }; _proto.render = function render() { var _this$props3 = this.props, actions = _this$props3.actions, disabled = _this$props3.disabled, emphasize = _this$props3.emphasize, fieldValue = _this$props3.fieldValue, placeholder = _this$props3.placeholder, type = _this$props3.type, validationInfo = _this$props3.validationInfo, valueOptions = _this$props3.valueOptions, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props3, ["actions", "disabled", "emphasize", "fieldValue", "placeholder", "type", "validationInfo", "valueOptions"]); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_EditableField.EditableFieldMaskUI, (0, _extends2.default)({}, (0, _getValidProps.default)(rest), { className: (0, _classnames.default)(_EditableField3.MASK_CLASSNAMES.component, disabled && _EditableField3.STATES_CLASSNAMES.isDisabled, validationInfo && _EditableField3.STATES_CLASSNAMES.withValidation), children: [valueOptions ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditableField.MaskOptionUI, { className: _EditableField3.MASK_CLASSNAMES.option, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Truncate.default, { children: fieldValue.option }) }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditableField.MaskValueUI, { className: (0, _classnames.default)(_EditableField3.MASK_CLASSNAMES.value, !fieldValue.value && _EditableField3.STATES_CLASSNAMES.withPlaceholder, emphasize && _EditableField3.STATES_CLASSNAMES.isEmphasized), ref: this.setValueNode, onBlur: this.handleValueBlur, onKeyDown: this.handleValueKeyDown, numberOfActions: actions ? actions.length : 0, children: fieldValue.value ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditableField2.default, { string: fieldValue.value, splitter: type === 'email' ? '@' : undefined }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("span", { className: _EditableField3.STATES_CLASSNAMES.isPlaceholder, children: placeholder }) })] })); }; return EditableFieldMask; }(_react.default.Component); exports.EditableFieldMask = EditableFieldMask; function noop() {} EditableFieldMask.defaultProps = { 'data-cy': 'EditableFieldMask', disabled: false, emphasize: false, maskTabIndex: null, type: 'text', onValueKeyDown: noop }; EditableFieldMask.propTypes = { actions: _propTypes.default.any, disabled: _propTypes.default.bool, emphasize: _propTypes.default.bool, fieldValue: _propTypes.default.any, maskTabIndex: _propTypes.default.any, name: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), placeholder: _propTypes.default.string, type: _propTypes.default.string, validationInfo: _propTypes.default.object, valueOptions: _propTypes.default.arrayOf(_propTypes.default.any), onValueKeyDown: _propTypes.default.func, /** Data attr for Cypress tests. */ 'data-cy': _propTypes.default.string }; var _default = EditableFieldMask; exports.default = _default;