UNPKG

@atlaskit/dropdown-menu

Version:

A dropdown menu displays a list of actions or options to a user.

96 lines (95 loc) 5.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop")); var _menu = require("@atlaskit/menu"); var _buttonItem = _interopRequireDefault(require("@atlaskit/menu/button-item")); var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden")); var _radioIcon = _interopRequireDefault(require("../internal/components/radio-icon")); var _useRadioState3 = _interopRequireDefault(require("../internal/hooks/use-radio-state")); var _useRegisterItemWithFocusManager = _interopRequireDefault(require("../internal/hooks/use-register-item-with-focus-manager")); var _excluded = ["children", "defaultSelected", "testId", "id", "title", "description", "isDisabled", "isSelected", "onClick", "shouldDescriptionWrap", "shouldTitleWrap", "interactionName"]; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } /** * __Dropdown item radio__ * * A dropdown item radio displays groups that have a single selection. * * - [Examples](https://atlassian.design/components/dropdown-menu/dropdown-item-radio/examples) * - [Code](https://atlassian.design/components/dropdown-menu/dropdown-item-radio/code) * - [Usage](https://atlassian.design/components/dropdown-menu/dropdown-item-radio/usage) */ var DropdownItemRadio = function DropdownItemRadio(_ref) { var children = _ref.children, defaultSelected = _ref.defaultSelected, testId = _ref.testId, id = _ref.id, title = _ref.title, description = _ref.description, isDisabled = _ref.isDisabled, isSelected = _ref.isSelected, _ref$onClick = _ref.onClick, providedOnClick = _ref$onClick === void 0 ? _noop.default : _ref$onClick, _ref$shouldDescriptio = _ref.shouldDescriptionWrap, shouldDescriptionWrap = _ref$shouldDescriptio === void 0 ? true : _ref$shouldDescriptio, _ref$shouldTitleWrap = _ref.shouldTitleWrap, shouldTitleWrap = _ref$shouldTitleWrap === void 0 ? true : _ref$shouldTitleWrap, interactionName = _ref.interactionName, rest = (0, _objectWithoutProperties2.default)(_ref, _excluded); if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production' && typeof isSelected !== 'undefined' && typeof defaultSelected !== 'undefined') { // eslint-disable-next-line no-console console.warn("[DropdownItemRadio] You've used both `defaultSelected` and `isSelected` props. This is dangerous and can lead to unexpected results. Use one or the other depending if you want to control the components state yourself."); } var _useRadioState = (0, _useRadioState3.default)({ id: id, isSelected: isSelected, defaultSelected: defaultSelected }), _useRadioState2 = (0, _slicedToArray2.default)(_useRadioState, 2), selected = _useRadioState2[0], setSelected = _useRadioState2[1]; var onClickHandler = (0, _react.useCallback)(function (event) { setSelected(function (selected) { return !selected; }); providedOnClick(event); }, [providedOnClick, setSelected]); var itemRef = (0, _useRegisterItemWithFocusManager.default)(); return /*#__PURE__*/_react.default.createElement(_menu.SELECTION_STYLE_CONTEXT_DO_NOT_USE.Provider, { value: "none" }, /*#__PURE__*/_react.default.createElement(_buttonItem.default, (0, _extends2.default)({ "aria-checked": selected, "aria-describedby": "".concat(id, "-radio"), description: description, iconBefore: /*#__PURE__*/_react.default.createElement(_radioIcon.default, { checked: selected }), id: id, isDisabled: isDisabled, isSelected: selected, onClick: onClickHandler, ref: itemRef, role: "menuitemradio", shouldDescriptionWrap: shouldDescriptionWrap, shouldTitleWrap: shouldTitleWrap, testId: testId // Thanks to spread props, this attribute are passed to ButtonItem, even though // it's not in the component's prop types. // @ts-expect-error , title: title, interactionName: interactionName // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props }, rest), children), /*#__PURE__*/_react.default.createElement(_visuallyHidden.default, { id: "".concat(id, "-radio") }, "radio button ", selected)); }; var _default = exports.default = DropdownItemRadio;