UNPKG

4.1 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = void 0;
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
13
14var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
16var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
17
18var _classnames = _interopRequireDefault(require("classnames"));
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22var _react = _interopRequireWildcard(require("react"));
23
24var _MenuItem = require("./MenuItem");
25
26var _propTypes2 = require("../propTypes");
27
28var MenuDivider = function MenuDivider(props) {
29 return /*#__PURE__*/_react["default"].createElement("div", {
30 className: "dropdown-divider",
31 role: "separator"
32 });
33};
34
35var MenuHeader = function MenuHeader(props) {
36 return (
37 /*#__PURE__*/
38 // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
39 _react["default"].createElement("div", (0, _extends2["default"])({}, props, {
40 className: "dropdown-header",
41 role: "heading"
42 }))
43 );
44};
45
46var propTypes = {
47 'aria-label': _propTypes["default"].string,
48
49 /**
50 * Message to display in the menu if there are no valid results.
51 */
52 emptyLabel: _propTypes["default"].node,
53
54 /**
55 * Needed for accessibility.
56 */
57 id: (0, _propTypes2.checkPropType)(_propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]), _propTypes2.isRequiredForA11y),
58
59 /**
60 * Maximum height of the dropdown menu.
61 */
62 maxHeight: _propTypes["default"].string
63};
64var defaultProps = {
65 'aria-label': 'menu-options',
66 emptyLabel: 'No matches found.',
67 maxHeight: '300px'
68};
69
70/**
71 * Menu component that handles empty state when passed a set of results.
72 */
73var Menu = /*#__PURE__*/function (_React$Component) {
74 (0, _inheritsLoose2["default"])(Menu, _React$Component);
75
76 function Menu() {
77 return _React$Component.apply(this, arguments) || this;
78 }
79
80 var _proto = Menu.prototype;
81
82 _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
83 var _this$props = this.props,
84 inputHeight = _this$props.inputHeight,
85 scheduleUpdate = _this$props.scheduleUpdate; // Update the menu position if the height of the input changes.
86
87 if (inputHeight !== prevProps.inputHeight) {
88 scheduleUpdate();
89 }
90 };
91
92 _proto.render = function render() {
93 var _this$props2 = this.props,
94 children = _this$props2.children,
95 className = _this$props2.className,
96 emptyLabel = _this$props2.emptyLabel,
97 id = _this$props2.id,
98 innerRef = _this$props2.innerRef,
99 maxHeight = _this$props2.maxHeight,
100 style = _this$props2.style,
101 text = _this$props2.text;
102 var contents = _react.Children.count(children) === 0 ? /*#__PURE__*/_react["default"].createElement(_MenuItem.BaseMenuItem, {
103 disabled: true,
104 role: "option"
105 }, emptyLabel) : children;
106 return /*#__PURE__*/_react["default"].createElement("div", {
107 "aria-label": this.props['aria-label'],
108 className: (0, _classnames["default"])('rbt-menu', 'dropdown-menu', 'show', className),
109 id: id,
110 key: // Force a re-render if the text changes to ensure that menu
111 // positioning updates correctly.
112 text,
113 ref: innerRef,
114 role: "listbox",
115 style: (0, _extends2["default"])({}, style, {
116 display: 'block',
117 maxHeight: maxHeight,
118 overflow: 'auto'
119 })
120 }, contents);
121 };
122
123 return Menu;
124}(_react["default"].Component);
125
126(0, _defineProperty2["default"])(Menu, "propTypes", propTypes);
127(0, _defineProperty2["default"])(Menu, "defaultProps", defaultProps);
128(0, _defineProperty2["default"])(Menu, "Divider", MenuDivider);
129(0, _defineProperty2["default"])(Menu, "Header", MenuHeader);
130var _default = Menu;
131exports["default"] = _default;
\No newline at end of file