UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

217 lines (178 loc) 8.72 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.classNameStrings = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps")); var _Flexy = _interopRequireDefault(require("../Flexy")); var _Link = _interopRequireDefault(require("../Link")); var _Icon = _interopRequireDefault(require("../Icon")); var _Keys = _interopRequireDefault(require("../../constants/Keys")); var _classnames = _interopRequireDefault(require("classnames")); var _Accordion = require("./Accordion.css"); var _Accordion2 = require("./Accordion.Section"); var _Accordion3 = require("./Accordion"); var _Sortable = _interopRequireDefault(require("../Sortable/Sortable.DragHandle")); var _jsxRuntime = require("react/jsx-runtime"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var classNameStrings = { baseComponentClassName: 'c-Accordion__Section__Title', iconCaretClassName: 'c-AccordionTitleCaretIcon', isCompactClassName: 'is-compact', isLinkClassName: 'is-link', isOpenClassName: 'is-open', isPageClassName: 'is-page', isSeamlessClassName: 'is-seamless', isSortableClassName: 'is-sortable', isSizeXsClassName: 'is-xs', isSizeSmClassName: 'is-sm', isSizeMdClassName: 'is-md', isSizeLgClassName: 'is-lg', isSizeXlClassName: 'is-xl' }; exports.classNameStrings = classNameStrings; var getComponentClassName = function getComponentClassName(_ref) { var className = _ref.className, isCompact = _ref.isCompact, isOpen = _ref.isOpen, isPage = _ref.isPage, isSeamless = _ref.isSeamless, isSortable = _ref.isSortable, size = _ref.size, isLink = _ref.isLink; var baseComponentClassName = classNameStrings.baseComponentClassName, isCompactClassName = classNameStrings.isCompactClassName, isLinkClassName = classNameStrings.isLinkClassName, isOpenClassName = classNameStrings.isOpenClassName, isPageClassName = classNameStrings.isPageClassName, isSeamlessClassName = classNameStrings.isSeamlessClassName, isSortableClassName = classNameStrings.isSortableClassName, isSizeXsClassName = classNameStrings.isSizeXsClassName, isSizeSmClassName = classNameStrings.isSizeSmClassName, isSizeMdClassName = classNameStrings.isSizeMdClassName, isSizeLgClassName = classNameStrings.isSizeLgClassName, isSizeXlClassName = classNameStrings.isSizeXlClassName; return (0, _classnames.default)(baseComponentClassName, isCompact && isCompactClassName, isLink && isLinkClassName, !isLink && isOpen && isOpenClassName, isPage && isPageClassName, isSeamless && isSeamlessClassName, isSortable && isSortableClassName, size && size === 'xs' && isSizeXsClassName, size && size === 'sm' && isSizeSmClassName, size && size === 'md' && isSizeMdClassName, size && size === 'lg' && isSizeLgClassName, size && size === 'xl' && isSizeXlClassName, className); }; var getIconName = function getIconName(isOpen, isLink) { var name = isOpen ? 'caret-up' : 'caret-down'; if (isLink) { name = 'caret-right'; } return name; }; var getDragHandleClassName = function getDragHandleClassName(isPage) { var isPageClassName = classNameStrings.isPageClassName; return (0, _classnames.default)('drag-handle', isPage && isPageClassName); }; var AccordionTitle = function AccordionTitle(props) { var badge = props.badge, children = props.children, className = props.className, isCompact = props.isCompact, onClick = props.onClick, status = props.status, rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["badge", "children", "className", "isCompact", "onClick", "status"]); var _ref2 = (0, _react.useContext)(_Accordion2.SectionContext) || {}, uuid = _ref2.uuid, isOpen = _ref2.isOpen; var _ref3 = (0, _react.useContext)(_Accordion3.AccordionContext) || {}, isPage = _ref3.isPage, isSeamless = _ref3.isSeamless, _ref3$setSectionState = _ref3.setSectionState, setSectionState = _ref3$setSectionState === void 0 ? noop : _ref3$setSectionState, size = _ref3.size, isSorting = _ref3.isSorting, isSortable = _ref3.isSortable; var isLink = props.href || props.to; var isIconOpen = isLink ? false : isOpen; var componentClassName = getComponentClassName({ className: className, isCompact: isCompact, isOpen: isOpen, isPage: isPage, isSeamless: isSeamless, size: size, isLink: isLink, isSortable: isSortable, isSorting: isSorting }); var restProps = isLink ? rest : (0, _getValidProps.default)(rest); var handleClick = function handleClick(event) { onClick(event); if (event.isDefaultPrevented() || event.isPropagationStopped()) return; if (isLink) return; event && event.preventDefault(); setSectionState(uuid, !isOpen); }; var handleKeyPress = function handleKeyPress(event) { var ENTER = _Keys.default.ENTER, SPACE = _Keys.default.SPACE; if (event && (event.keyCode === ENTER || event.keyCode === SPACE)) { handleClick(event); } }; var handleMouseDown = function handleMouseDown(event) { return event.preventDefault(); }; var iconProps = { className: classNameStrings.iconCaretClassName, faint: !isIconOpen, name: getIconName(isIconOpen, isLink), size: 14 }; var badgeMarkup = badge ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Flexy.default.Item, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Accordion.BadgeUI, { status: status, inverted: true, children: badge }) }) : null; var dragHandle = isSortable ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Sortable.default, { className: getDragHandleClassName(isPage), iconSize: isPage ? '24' : '20', onDragStart: handleMouseDown }) : null; var id = "accordion__section__title--" + uuid; var ariaControls = "accordion__section__body--" + uuid; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Accordion.TitleUI, (0, _extends2.default)({}, restProps, { "aria-controls": ariaControls, "aria-selected": isOpen, className: componentClassName, id: id, onClick: handleClick, onKeyDown: handleKeyPress, role: "tab", tabIndex: "0", as: isLink ? _Link.default : 'div', children: [dragHandle, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Accordion.TitleContentUI, { children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Flexy.default.Block, { children: children }), badgeMarkup, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Flexy.default.Item, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.default, (0, _extends2.default)({}, iconProps)) })] })] })); }; function noop() {} AccordionTitle.defaultProps = { 'data-cy': 'AccordionTitle', isCompact: false, onClick: noop }; AccordionTitle.propTypes = { /** Content to render. */ children: _propTypes.default.any, /** Custom class names to be added to the component. */ className: _propTypes.default.string, /** Callback to be invoked when clicked. */ onClick: _propTypes.default.func, /** Data attr for Cypress tests. */ 'data-cy': _propTypes.default.string }; var _default = AccordionTitle; exports.default = _default;