UNPKG

@wordpress/components

Version:
182 lines (149 loc) 4.83 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classnames = _interopRequireDefault(require("classnames")); var _lodash = require("lodash"); var _reactNative = require("react-native"); var _keycodes = require("@wordpress/keycodes"); var _deprecated = _interopRequireDefault(require("@wordpress/deprecated")); var _components = require("@wordpress/components"); var _compose = require("@wordpress/compose"); var _icons = require("@wordpress/icons"); var _button = _interopRequireDefault(require("../button")); var _dropdown = _interopRequireDefault(require("../dropdown")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function mergeProps(defaultProps = {}, props = {}) { const mergedProps = { ...defaultProps, ...props }; if (props.className && defaultProps.className) { mergedProps.className = (0, _classnames.default)(props.className, defaultProps.className); } return mergedProps; } function DropdownMenu({ children, className, controls, icon = _icons.menu, label, popoverProps, toggleProps, // The following props exist for backward compatibility. menuLabel, position }) { if (menuLabel) { (0, _deprecated.default)('`menuLabel` prop in `DropdownComponent`', { alternative: '`menuProps` object and its `aria-label` property', plugin: 'Gutenberg' }); } if (position) { (0, _deprecated.default)('`position` prop in `DropdownComponent`', { alternative: '`popoverProps` object and its `position` property', plugin: 'Gutenberg' }); } if ((0, _lodash.isEmpty)(controls) && !(0, _lodash.isFunction)(children)) { return null; } // Normalize controls to nested array of objects (sets of controls) let controlSets; if (!(0, _lodash.isEmpty)(controls)) { controlSets = controls; if (!Array.isArray(controlSets[0])) { controlSets = [controlSets]; } } const mergedPopoverProps = mergeProps({ className: 'components-dropdown-menu__popover', position }, popoverProps); return (0, _element.createElement)(_dropdown.default, { className: (0, _classnames.default)('components-dropdown-menu', className), popoverProps: mergedPopoverProps, renderToggle: ({ isOpen, onToggle }) => { const openOnArrowDown = event => { if (!isOpen && event.keyCode === _keycodes.DOWN) { event.preventDefault(); event.stopPropagation(); onToggle(); } }; const mergedToggleProps = mergeProps({ className: (0, _classnames.default)('components-dropdown-menu__toggle', { 'is-opened': isOpen }) }, toggleProps); return (0, _element.createElement)(_button.default, (0, _extends2.default)({}, mergedToggleProps, { icon: icon, onClick: event => { onToggle(event); if (mergedToggleProps.onClick) { mergedToggleProps.onClick(event); } }, onKeyDown: event => { openOnArrowDown(event); if (mergedToggleProps.onKeyDown) { mergedToggleProps.onKeyDown(event); } }, "aria-haspopup": "true", "aria-expanded": isOpen, label: label, showTooltip: true }), mergedToggleProps.children); }, renderContent: ({ isOpen, onClose, ...props }) => { return (0, _element.createElement)(_components.BottomSheet, { hideHeader: true, isVisible: isOpen, onClose: onClose }, (0, _lodash.isFunction)(children) ? children(props) : null, (0, _element.createElement)(_components.PanelBody, { title: label, style: { paddingLeft: 0, paddingRight: 0 } }, (0, _lodash.flatMap)(controlSets, (controlSet, indexOfSet) => controlSet.map((control, indexOfControl) => (0, _element.createElement)(_components.BottomSheet.Cell, { key: [indexOfSet, indexOfControl].join(), label: control.title, onPress: () => { onClose(); if (control.onClick) { control.onClick(); } }, editable: false, icon: control.icon, leftAlign: true, isSelected: control.isActive, separatorType: _reactNative.Platform.OS === 'android' ? 'none' : 'leftMargin' }))))); } }); } var _default = (0, _compose.withPreferredColorScheme)(DropdownMenu); exports.default = _default; //# sourceMappingURL=index.native.js.map