@helpscout/hsds-react
Version:
React component library for Help Scout's Design System
217 lines (178 loc) • 8.72 kB
JavaScript
"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;