UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

219 lines (172 loc) 7.21 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps")); var _classnames = _interopRequireDefault(require("classnames")); var _Modal = require("./Modal.utils"); var _ModalActionFooter = require("./Modal.ActionFooter.css"); var _Button = require("../Button/Button.utils"); var _jsxRuntime = require("react/jsx-runtime"); function noop() {} var ModalActionFooter = /*#__PURE__*/function (_React$PureComponent) { (0, _inheritsLoose2.default)(ModalActionFooter, _React$PureComponent); function ModalActionFooter() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this; _this.handleCancel = function (e) { e && e.preventDefault(); var onCancel = _this.props.onCancel; onCancel(); }; _this.handlePrimaryAction = function (e) { e && e.preventDefault(); var onPrimaryClick = _this.props.onPrimaryClick; onPrimaryClick(); }; _this.handleSecondaryAction = function (e) { e && e.preventDefault(); var onSecondaryClick = _this.props.onSecondaryClick; onSecondaryClick(); }; return _this; } var _proto = ModalActionFooter.prototype; _proto.renderPrimaryButton = function renderPrimaryButton() { var _this$props = this.props, primaryButtonText = _this$props.primaryButtonText, primaryButtonProps = _this$props.primaryButtonProps, state = _this$props.state, primaryButtonDisabled = _this$props.primaryButtonDisabled; var theme = _Button.THEME_BLUE; if (state === 'success') theme = _Button.THEME_GREEN; if (state === 'danger') theme = _Button.THEME_RED; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ModalActionFooter.PrimaryButtonUI, (0, _extends2.default)({ size: "lg", "data-cy": "PrimaryButton" }, primaryButtonProps, { theme: theme, onClick: this.handlePrimaryAction, disabled: primaryButtonDisabled, children: primaryButtonText })); }; _proto.renderSecondaryButton = function renderSecondaryButton() { var _this$props2 = this.props, kind = _this$props2.kind, secondaryButtonText = _this$props2.secondaryButtonText, secondaryButtonProps = _this$props2.secondaryButtonProps, secondaryButtonDisabled = _this$props2.secondaryButtonDisabled; if (!secondaryButtonText) { return null; } var ButtonComponent = kind === _Modal.MODAL_KIND.ALERT ? _ModalActionFooter.SecondaryAlertButtonUI : _ModalActionFooter.SecondaryButtonUI; return /*#__PURE__*/(0, _jsxRuntime.jsx)(ButtonComponent, (0, _extends2.default)({ size: "lg", theme: "grey", outlined: true, "data-cy": "SecondaryButton" }, secondaryButtonProps, { onClick: this.handleSecondaryAction, disabled: secondaryButtonDisabled, children: secondaryButtonText })); }; _proto.renderCancelButton = function renderCancelButton() { var _this$props3 = this.props, cancelText = _this$props3.cancelText, cancelProps = _this$props3.cancelProps, showDefaultCancel = _this$props3.showDefaultCancel; if (!(showDefaultCancel && cancelText)) { return null; } return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ModalActionFooter.CancelButtonUI, (0, _extends2.default)({ linked: true, size: "lg", theme: _Button.THEME_GREY, className: "is-cancel", "data-cy": "CancelButton" }, cancelProps, { onClick: this.handleCancel, children: cancelText })); }; _proto.render = function render() { var _this$props4 = this.props, className = _this$props4.className, kind = _this$props4.kind, state = _this$props4.state, shadow = _this$props4.shadow, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props4, ["className", "kind", "state", "shadow"]); var modalKindClassName = (0, _Modal.getModalKindClassName)(kind); var componentClassName = (0, _classnames.default)('c-ModalActionFooter', modalKindClassName, state === 'danger' && 'is-danger', className); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ModalActionFooter.ActionFooterUI, (0, _extends2.default)({}, (0, _getValidProps.default)(rest), { className: componentClassName, gap: "md", placement: "bottom", size: "md", shadow: shadow, children: [this.renderCancelButton(), this.renderSecondaryButton(), this.renderPrimaryButton()] })); }; return ModalActionFooter; }(_react.default.PureComponent); ModalActionFooter.defaultProps = { cancelText: 'Cancel', cancelProps: {}, 'data-cy': 'ModalActionFooter', kind: _Modal.MODAL_KIND.DEFAULT, onCancel: noop, onPrimaryClick: noop, onSecondaryClick: noop, primaryButtonText: 'Save', primaryButtonProps: {}, primaryButtonDisabled: false, secondaryButtonText: null, secondaryButtonProps: {}, secondaryButtonDisabled: false, showDefaultCancel: true, state: '' }; ModalActionFooter.propTypes = { /** Text on cancel button */ cancelText: _propTypes.default.string, /** Extra props on cancel button */ cancelProps: _propTypes.default.object, /** The kind of version 2 Modal style to apply. */ kind: _propTypes.default.oneOf(['alert', 'default', 'branded', 'sequence']), /** Callback on cancel button click */ onCancel: _propTypes.default.func, /** Callback on primary button click */ onPrimaryClick: _propTypes.default.func, /** Callback on secondary button click */ onSecondaryClick: _propTypes.default.func, /** Text on primary button */ primaryButtonText: _propTypes.default.string, /** Extra props on primary button */ primaryButtonProps: _propTypes.default.object, /** Whether the button is disabled */ primaryButtonDisabled: _propTypes.default.bool, /** Text on secondary button */ secondaryButtonText: _propTypes.default.string, /** Whether the button is disabled */ secondaryButtonDisabled: _propTypes.default.bool, /** Extra props on secondary button */ secondaryButtonProps: _propTypes.default.object, /** Show cancel button */ showDefaultCancel: _propTypes.default.bool, /** State to use when styling a version 2 Modal (currently only `danger` state is custom styled). */ state: _propTypes.default.oneOf(['', 'danger']), /** Data attr for Cypress tests. */ 'data-cy': _propTypes.default.string }; var _default = ModalActionFooter; exports.default = _default;