@atlaskit/dropdown-menu
Version:
A dropdown menu displays a list of actions or options to a user.
96 lines (95 loc) • 5.4 kB
JavaScript
"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;