UNPKG

9.22 kBJavaScriptView Raw
1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = Menu;
9
10var React = _interopRequireWildcard(require("react"));
11
12var _index = require("../locale/index.js");
13
14var _styledComponents = require("./styled-components.js");
15
16var _optionList = _interopRequireDefault(require("./option-list.js"));
17
18var _overrides = require("../helpers/overrides.js");
19
20var _focusVisible = require("../utils/focusVisible.js");
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
24function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
25
26function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
28function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
29
30function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
31
32function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
33
34function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
35
36function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
37
38function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
39
40function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
41
42function Menu(props) {
43 var _props$overrides = props.overrides,
44 overrides = _props$overrides === void 0 ? {} : _props$overrides,
45 _props$rootRef = props.rootRef,
46 rootRef = _props$rootRef === void 0 ? React.createRef() : _props$rootRef,
47 _props$focusMenu = props.focusMenu,
48 focusMenu = _props$focusMenu === void 0 ? function () {} : _props$focusMenu,
49 _props$unfocusMenu = props.unfocusMenu,
50 unfocusMenu = _props$unfocusMenu === void 0 ? function () {} : _props$unfocusMenu,
51 _props$handleMouseLea = props.handleMouseLeave,
52 handleMouseLeave = _props$handleMouseLea === void 0 ? function () {} : _props$handleMouseLea,
53 _props$handleKeyDown = props.handleKeyDown,
54 handleKeyDown = _props$handleKeyDown === void 0 ? function (event) {} : _props$handleKeyDown,
55 _props$renderAll = props.renderAll,
56 renderAll = _props$renderAll === void 0 ? false : _props$renderAll;
57
58 var _React$useState = React.useState(false),
59 _React$useState2 = _slicedToArray(_React$useState, 2),
60 focusVisible = _React$useState2[0],
61 setFocusVisible = _React$useState2[1];
62
63 var handleFocus = function handleFocus(event) {
64 if ((0, _focusVisible.isFocusVisible)(event)) {
65 setFocusVisible(true);
66 }
67 };
68
69 var handleBlur = function handleBlur(event) {
70 if (focusVisible !== false) {
71 setFocusVisible(false);
72 }
73 };
74
75 var _getOverrides = (0, _overrides.getOverrides)(overrides.List, _styledComponents.StyledList),
76 _getOverrides2 = _slicedToArray(_getOverrides, 2),
77 List = _getOverrides2[0],
78 listProps = _getOverrides2[1];
79
80 var _getOverrides3 = (0, _overrides.getOverrides)(overrides.Option, _optionList.default),
81 _getOverrides4 = _slicedToArray(_getOverrides3, 2),
82 Option = _getOverrides4[0],
83 optionProps = _getOverrides4[1];
84
85 var _getOverrides5 = (0, _overrides.getOverrides)(overrides.EmptyState, _styledComponents.StyledEmptyState),
86 _getOverrides6 = _slicedToArray(_getOverrides5, 2),
87 EmptyState = _getOverrides6[0],
88 emptyStateProps = _getOverrides6[1];
89
90 var _getOverrides7 = (0, _overrides.getOverrides)(overrides.OptgroupHeader, _styledComponents.StyledOptgroupHeader),
91 _getOverrides8 = _slicedToArray(_getOverrides7, 2),
92 OptgroupHeader = _getOverrides8[0],
93 optgroupHeaderProps = _getOverrides8[1];
94
95 var groupedItems = Array.isArray(props.items) ? {
96 __ungrouped: props.items
97 } : props.items;
98 var optgroups = Object.keys(groupedItems);
99
100 var _optgroups$reduce = optgroups.reduce(function (_ref, optgroup) {
101 var _ref2 = _slicedToArray(_ref, 2),
102 els = _ref2[0],
103 itemIndex = _ref2[1];
104
105 if (optgroup !== '__ungrouped') {
106 els.push(React.createElement(OptgroupHeader, _extends({
107 key: optgroup
108 }, optgroupHeaderProps), optgroup));
109 }
110
111 var groupItems = groupedItems[optgroup].map(function (item, index) {
112 itemIndex = itemIndex + 1;
113 var _props$getRequiredIte = props.getRequiredItemProps,
114 getRequiredItemProps = _props$getRequiredIte === void 0 ? function (item, index) {
115 return {};
116 } : _props$getRequiredIte;
117
118 var _getRequiredItemProps = getRequiredItemProps(item, itemIndex),
119 disabled = _getRequiredItemProps.disabled,
120 isFocused = _getRequiredItemProps.isFocused,
121 isHighlighted = _getRequiredItemProps.isHighlighted,
122 _getRequiredItemProps2 = _getRequiredItemProps.resetMenu,
123 resetMenu = _getRequiredItemProps2 === void 0 ? function () {} : _getRequiredItemProps2,
124 restProps = _objectWithoutProperties(_getRequiredItemProps, ["disabled", "isFocused", "isHighlighted", "resetMenu"]);
125
126 return React.createElement(Option, _extends({
127 renderAll: renderAll,
128 key: itemIndex,
129 item: item,
130 overrides: props.overrides,
131 resetMenu: resetMenu,
132 role: "option",
133 $disabled: disabled,
134 $isFocused: isFocused,
135 $isHighlighted: isHighlighted,
136 "aria-disabled": disabled,
137 "aria-selected": isHighlighted && isFocused
138 }, restProps, optionProps));
139 });
140 return [els.concat(groupItems), itemIndex];
141 }, [[], -1]),
142 _optgroups$reduce2 = _slicedToArray(_optgroups$reduce, 1),
143 elements = _optgroups$reduce2[0];
144
145 var isEmpty = optgroups.every(function (optgroup) {
146 return !groupedItems[optgroup].length;
147 });
148 return React.createElement(_index.LocaleContext.Consumer, null, function (locale) {
149 return React.createElement(List, _extends({
150 "aria-activedescendant": props.activedescendantId || null,
151 role: "listbox",
152 ref: rootRef,
153 onMouseEnter: focusMenu,
154 onMouseLeave: handleMouseLeave,
155 onMouseOver: focusMenu,
156 onFocus: (0, _focusVisible.forkFocus)({
157 onFocus: focusMenu
158 }, handleFocus),
159 onBlur: (0, _focusVisible.forkBlur)({
160 onBlur: unfocusMenu
161 }, handleBlur),
162 onKeyDown: function onKeyDown(event) {
163 if (props.isFocused) {
164 handleKeyDown(event);
165 }
166 },
167 tabIndex: 0,
168 "data-baseweb": "menu",
169 $isFocusVisible: focusVisible
170 }, listProps), isEmpty ? React.createElement(EmptyState, _extends({
171 "aria-live": "polite",
172 "aria-atomic": true
173 }, emptyStateProps), props.noResultsMsg || locale.menu.noResultsMsg) : elements);
174 });
175}
\No newline at end of file