UNPKG

3.92 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
15
16var _react = _interopRequireWildcard(require("react"));
17
18var _propTypes = _interopRequireDefault(require("prop-types"));
19
20var _Highlighter = _interopRequireDefault(require("./Highlighter"));
21
22var _Menu = _interopRequireDefault(require("./Menu"));
23
24var _MenuItem = _interopRequireDefault(require("./MenuItem"));
25
26var _utils = require("../utils");
27
28var propTypes = {
29 /**
30 * Provides the ability to specify a prefix before the user-entered text to
31 * indicate that the selection will be new. No-op unless `allowNew={true}`.
32 */
33 newSelectionPrefix: _propTypes["default"].node,
34
35 /**
36 * Prompt displayed when large data sets are paginated.
37 */
38 paginationText: _propTypes["default"].node,
39
40 /**
41 * Provides a hook for customized rendering of menu item contents.
42 */
43 renderMenuItemChildren: _propTypes["default"].func
44};
45var defaultProps = {
46 newSelectionPrefix: 'New selection: ',
47 paginationText: 'Display additional results...',
48 renderMenuItemChildren: function renderMenuItemChildren(option, props, idx) {
49 return /*#__PURE__*/_react["default"].createElement(_Highlighter["default"], {
50 search: props.text
51 }, (0, _utils.getOptionLabel)(option, props.labelKey));
52 }
53};
54
55var TypeaheadMenu = function TypeaheadMenu(props) {
56 var labelKey = props.labelKey,
57 newSelectionPrefix = props.newSelectionPrefix,
58 options = props.options,
59 paginationText = props.paginationText,
60 renderMenuItemChildren = props.renderMenuItemChildren,
61 text = props.text,
62 menuProps = (0, _objectWithoutPropertiesLoose2["default"])(props, ["labelKey", "newSelectionPrefix", "options", "paginationText", "renderMenuItemChildren", "text"]);
63
64 var renderMenuItem = function renderMenuItem(option, position) {
65 var label = (0, _utils.getOptionLabel)(option, labelKey);
66 var menuItemProps = {
67 disabled: (0, _utils.getOptionProperty)(option, 'disabled'),
68 label: label,
69 option: option,
70 position: position
71 };
72
73 if (option.customOption) {
74 return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], (0, _extends2["default"])({}, menuItemProps, {
75 className: "rbt-menu-custom-option",
76 key: position,
77 label: label
78 }), newSelectionPrefix, /*#__PURE__*/_react["default"].createElement(_Highlighter["default"], {
79 search: text
80 }, label));
81 }
82
83 if (option.paginationOption) {
84 return /*#__PURE__*/_react["default"].createElement(_react.Fragment, {
85 key: "pagination-item"
86 }, /*#__PURE__*/_react["default"].createElement(_Menu["default"].Divider, null), /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], (0, _extends2["default"])({}, menuItemProps, {
87 className: "rbt-menu-pagination-option",
88 label: paginationText
89 }), paginationText));
90 }
91
92 return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], (0, _extends2["default"])({}, menuItemProps, {
93 key: position
94 }), renderMenuItemChildren(option, props, position));
95 };
96
97 return (
98 /*#__PURE__*/
99 // Explictly pass `text` so Flow doesn't complain...
100 _react["default"].createElement(_Menu["default"], (0, _extends2["default"])({}, menuProps, {
101 text: text
102 }), options.map(renderMenuItem))
103 );
104};
105
106TypeaheadMenu.propTypes = propTypes;
107TypeaheadMenu.defaultProps = defaultProps;
108var _default = TypeaheadMenu;
109exports["default"] = _default;
\No newline at end of file