UNPKG

4.12 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
14var _propTypes = _interopRequireDefault(require("prop-types"));
15
16var _react = _interopRequireDefault(require("react"));
17
18var _Highlighter = _interopRequireDefault(require("../Highlighter"));
19
20var _Menu = _interopRequireDefault(require("../Menu"));
21
22var _MenuItem = _interopRequireDefault(require("../MenuItem"));
23
24var _utils = require("../../utils");
25
26var _excluded = ["labelKey", "newSelectionPrefix", "options", "paginationText", "renderMenuItemChildren", "text"];
27var propTypes = {
28 /**
29 * Provides the ability to specify a prefix before the user-entered text to
30 * indicate that the selection will be new. No-op unless `allowNew={true}`.
31 */
32 newSelectionPrefix: _propTypes["default"].node,
33
34 /**
35 * Prompt displayed when large data sets are paginated.
36 */
37 paginationText: _propTypes["default"].node,
38
39 /**
40 * Provides a hook for customized rendering of menu item contents.
41 */
42 renderMenuItemChildren: _propTypes["default"].func
43};
44var defaultProps = {
45 newSelectionPrefix: 'New selection: ',
46 paginationText: 'Display additional results...',
47 renderMenuItemChildren: function renderMenuItemChildren(option, props) {
48 return /*#__PURE__*/_react["default"].createElement(_Highlighter["default"], {
49 search: props.text
50 }, (0, _utils.getOptionLabel)(option, props.labelKey));
51 }
52};
53
54var TypeaheadMenu = function TypeaheadMenu(props) {
55 var labelKey = props.labelKey,
56 newSelectionPrefix = props.newSelectionPrefix,
57 options = props.options,
58 paginationText = props.paginationText,
59 renderMenuItemChildren = props.renderMenuItemChildren,
60 text = props.text,
61 menuProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
62
63 var renderMenuItem = function renderMenuItem(option, position) {
64 var label = (0, _utils.getOptionLabel)(option, labelKey);
65 var menuItemProps = {
66 disabled: !!(0, _utils.getOptionProperty)(option, 'disabled'),
67 label: label,
68 option: option,
69 position: position
70 };
71
72 if ((0, _utils.getOptionProperty)(option, 'customOption')) {
73 return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], (0, _extends2["default"])({}, menuItemProps, {
74 className: "rbt-menu-custom-option",
75 key: position,
76 label: label
77 }), newSelectionPrefix, /*#__PURE__*/_react["default"].createElement(_Highlighter["default"], {
78 search: text
79 }, label));
80 }
81
82 if ((0, _utils.getOptionProperty)(option, 'paginationOption')) {
83 return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
84 key: "pagination-option-divider"
85 }, /*#__PURE__*/_react["default"].createElement(_Menu["default"].Divider, null), /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], (0, _extends2["default"])({}, menuItemProps, {
86 className: "rbt-menu-pagination-option",
87 label: // TODO: Fix how (aria-)labels are passed to `MenuItem`.
88 // `paginationText` can be a ReactNode.
89 (0, _utils.isString)(paginationText) ? paginationText : ''
90 }), paginationText));
91 }
92
93 return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], (0, _extends2["default"])({}, menuItemProps, {
94 key: position
95 }), renderMenuItemChildren(option, props, position));
96 };
97
98 return /*#__PURE__*/_react["default"].createElement(_Menu["default"], (0, _extends2["default"])({}, menuProps, {
99 key: // Force a re-render if the text changes to ensure that menu
100 // positioning updates correctly.
101 text
102 }), options.map(renderMenuItem));
103};
104
105TypeaheadMenu.propTypes = propTypes;
106TypeaheadMenu.defaultProps = defaultProps;
107var _default = TypeaheadMenu;
108exports["default"] = _default;
\No newline at end of file