@wordpress/components
Version:
UI components for WordPress.
161 lines (131 loc) • 4.36 kB
JavaScript
;
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 _reactNative = require("react-native");
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() {
let defaultProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const mergedProps = { ...defaultProps,
...props
};
if (props.className && defaultProps.className) {
mergedProps.className = (0, _classnames.default)(props.className, defaultProps.className);
}
return mergedProps;
}
/**
* Whether the argument is a function.
*
* @param {*} maybeFunc The argument to check.
* @return {boolean} True if the argument is a function, false otherwise.
*/
function isFunction(maybeFunc) {
return typeof maybeFunc === 'function';
}
function DropdownMenu(_ref) {
let {
children,
className,
controls,
icon = _icons.menu,
label,
popoverProps,
toggleProps
} = _ref;
if (!(controls !== null && controls !== void 0 && controls.length) && !isFunction(children)) {
return null;
} // Normalize controls to nested array of objects (sets of controls)
let controlSets;
if (controls !== null && controls !== void 0 && controls.length) {
controlSets = controls;
if (!Array.isArray(controlSets[0])) {
controlSets = [controlSets];
}
}
const mergedPopoverProps = mergeProps({
className: 'components-dropdown-menu__popover'
}, popoverProps);
return (0, _element.createElement)(_dropdown.default, {
className: (0, _classnames.default)('components-dropdown-menu', className),
popoverProps: mergedPopoverProps,
renderToggle: _ref2 => {
let {
isOpen,
onToggle
} = _ref2;
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);
}
},
"aria-haspopup": "true",
"aria-expanded": isOpen,
label: label
}), mergedToggleProps.children);
},
renderContent: _ref3 => {
var _controlSets;
let {
isOpen,
onClose,
...props
} = _ref3;
return (0, _element.createElement)(_components.BottomSheet, {
hideHeader: true,
isVisible: isOpen,
onClose: onClose
}, isFunction(children) ? children(props) : null, (0, _element.createElement)(_components.PanelBody, {
title: label,
style: {
paddingLeft: 0,
paddingRight: 0
}
}, (_controlSets = controlSets) === null || _controlSets === void 0 ? void 0 : _controlSets.flatMap((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