UNPKG

@elastic/eui

Version:

Elastic UI Component Library

144 lines (143 loc) 6.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.EuiKeyPadMenuItem = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _services = require("../../services"); var _beta_badge = require("../badge/beta_badge"); var _form = require("../form"); var _href_validator = require("../../services/security/href_validator"); var _tool_tip = require("../tool_tip"); var _key_pad_menu_item = require("./key_pad_menu_item.styles"); var _react2 = require("@emotion/react"); var _excluded = ["id", "isSelected", "isDisabled", "label", "children", "className", "betaBadgeLabel", "betaBadgeTooltipContent", "betaBadgeIconType", "betaBadgeTooltipProps", "href", "rel", "target", "buttonRef", "checkable", "name", "value", "disabled", "onChange"]; /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License * 2.0 and the Server Side Public License, v 1; you may not use this file except * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } var EuiKeyPadMenuItem = exports.EuiKeyPadMenuItem = function EuiKeyPadMenuItem(_ref) { var id = _ref.id, isSelected = _ref.isSelected, _isDisabled = _ref.isDisabled, label = _ref.label, children = _ref.children, className = _ref.className, betaBadgeLabel = _ref.betaBadgeLabel, betaBadgeTooltipContent = _ref.betaBadgeTooltipContent, betaBadgeIconType = _ref.betaBadgeIconType, betaBadgeTooltipProps = _ref.betaBadgeTooltipProps, href = _ref.href, rel = _ref.rel, target = _ref.target, buttonRef = _ref.buttonRef, checkable = _ref.checkable, name = _ref.name, value = _ref.value, disabled = _ref.disabled, _onChange = _ref.onChange, rest = (0, _objectWithoutProperties2.default)(_ref, _excluded); var isHrefValid = !href || (0, _href_validator.validateHref)(href); var isDisabled = disabled || _isDisabled || !isHrefValid; var euiTheme = (0, _services.useEuiTheme)(); var styles = (0, _key_pad_menu_item.euiKeyPadMenuItemStyles)(euiTheme); var cssStyles = [styles.euiKeyPadMenuItem, !isDisabled ? styles.enabled : styles.disabled.disabled, isSelected && (!isDisabled ? styles.selected : styles.disabled.selected)]; var classes = (0, _classnames.default)('euiKeyPadMenuItem', className); var Element = href && !isDisabled ? 'a' : 'button'; if (checkable) Element = 'label'; var itemId = (0, _services.useGeneratedHtmlId)({ conditionalId: id }); var childStyles = (0, _react.useMemo)(function () { return (0, _key_pad_menu_item.euiKeyPadMenuItemChildStyles)(euiTheme); }, [euiTheme]); var checkableElement = (0, _react.useMemo)(function () { if (!checkable) return; var cssStyles = [childStyles.euiKeyPadMenuItem__checkableInput, !isSelected && isDisabled && childStyles.hideCheckableInput, !isSelected && !isDisabled && childStyles.showCheckableInputOnInteraction]; var sharedProps = { id: itemId, className: 'euiKeyPadMenuItem__checkableInput', css: cssStyles, checked: isSelected, disabled: isDisabled, name: name }; if (checkable === 'single') { return (0, _react2.jsx)(_form.EuiRadio, (0, _extends2.default)({}, sharedProps, { value: value, onChange: function onChange() { return _onChange(itemId, value); } })); } else { return (0, _react2.jsx)(_form.EuiCheckbox, (0, _extends2.default)({}, sharedProps, { onChange: function onChange() { return _onChange(itemId); } })); } }, [checkable, isDisabled, isSelected, _onChange, value, name, itemId, childStyles]); var betaBadge = (0, _react.useMemo)(function () { if (!betaBadgeLabel) return; return (0, _react2.jsx)(_beta_badge.EuiBetaBadge // Since we move the tooltip contents to a wrapping EuiToolTip, // this badge is purely visual therefore we can safely hide it from screen readers , { "aria-hidden": "true", size: "s", color: "subdued", className: "euiKeyPadMenuItem__betaBadge", css: childStyles.euiKeyPadMenuItem__betaBadge, label: betaBadgeLabel.charAt(0), iconType: betaBadgeIconType }); }, [betaBadgeLabel, betaBadgeIconType, childStyles]); var relObj = {}; if (href && !isDisabled) { relObj.href = href; relObj.rel = (0, _services.getSecureRelForTarget)({ href: href, target: target, rel: rel }); relObj.target = target; relObj['aria-current'] = isSelected ? isSelected : undefined; } else if (checkable) { relObj.htmlFor = itemId; } else { relObj.disabled = isDisabled; relObj.type = 'button'; relObj['aria-pressed'] = isSelected; } var button = (0, _react2.jsx)(Element, (0, _extends2.default)({ className: classes, css: cssStyles }, relObj, rest, { // Unable to get past `LegacyRef` conflicts ref: buttonRef }), (0, _react2.jsx)("span", { className: "euiKeyPadMenuItem__inner", css: childStyles.euiKeyPadMenuItem__inner }, checkable ? checkableElement : betaBadge, (0, _react2.jsx)("span", { className: "euiKeyPadMenuItem__icon", css: childStyles.euiKeyPadMenuItem__icon }, children), (0, _react2.jsx)("span", { className: "euiKeyPadMenuItem__label", css: childStyles.euiKeyPadMenuItem__label }, label))); return betaBadgeLabel ? (0, _react2.jsx)(_tool_tip.EuiToolTip, (0, _extends2.default)({}, betaBadgeTooltipProps, { title: betaBadgeLabel, content: betaBadgeTooltipContent, delay: "long" }), button) : button; };