UNPKG

@shopify/polaris

Version:

Shopify’s admin product component library

87 lines (73 loc) 2.96 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var focus = require('../../utilities/focus.js'); var types = require('../../types.js'); var css = require('../../utilities/css.js'); var ActionList$1 = require('./ActionList.scss.js'); var Section = require('./components/Section/Section.js'); var KeypressListener = require('../KeypressListener/KeypressListener.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); function ActionList({ items, sections = [], actionRole, onActionAnyItem }) { let finalSections = []; const actionListRef = React.useRef(null); if (items) { finalSections = [{ items }, ...sections]; } else if (sections) { finalSections = sections; } const className = css.classNames(ActionList$1["default"].ActionList); const hasMultipleSections = finalSections.length > 1; const Element = hasMultipleSections ? 'ul' : 'div'; const elementRole = hasMultipleSections && actionRole === 'menuitem' ? 'menu' : undefined; const elementTabIndex = hasMultipleSections && actionRole === 'menuitem' ? -1 : undefined; const sectionMarkup = finalSections.map((section, index) => { return section.items.length > 0 ? /*#__PURE__*/React__default["default"].createElement(Section.Section, { key: section.title || index, section: section, hasMultipleSections: hasMultipleSections, actionRole: actionRole, onActionAnyItem: onActionAnyItem }) : null; }); const handleFocusPreviousItem = evt => { evt.preventDefault(); if (actionListRef.current && evt.target) { if (actionListRef.current.contains(evt.target)) { focus.wrapFocusPreviousFocusableMenuItem(actionListRef.current, evt.target); } } }; const handleFocusNextItem = evt => { evt.preventDefault(); if (actionListRef.current && evt.target) { if (actionListRef.current.contains(evt.target)) { focus.wrapFocusNextFocusableMenuItem(actionListRef.current, evt.target); } } }; const listeners = actionRole === 'menuitem' ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(KeypressListener.KeypressListener, { keyEvent: "keydown", keyCode: types.Key.DownArrow, handler: handleFocusNextItem }), /*#__PURE__*/React__default["default"].createElement(KeypressListener.KeypressListener, { keyEvent: "keydown", keyCode: types.Key.UpArrow, handler: handleFocusPreviousItem })) : null; return /*#__PURE__*/React__default["default"].createElement(Element, { ref: actionListRef, className: className, role: elementRole, tabIndex: elementTabIndex }, listeners, sectionMarkup); } exports.ActionList = ActionList;