UNPKG

14.2 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = void 0;
11
12var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
14var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
16var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
18var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
20var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
22var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
24var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
26var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
27
28var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
29
30var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
31
32var _classnames = _interopRequireDefault(require("classnames"));
33
34var _propTypes = _interopRequireDefault(require("prop-types"));
35
36var _react = _interopRequireWildcard(require("react"));
37
38var _useRootClose = _interopRequireDefault(require("react-overlays/useRootClose"));
39
40var _Typeahead = _interopRequireDefault(require("../../core/Typeahead"));
41
42var _ClearButton = _interopRequireDefault(require("../ClearButton"));
43
44var _Loader = _interopRequireDefault(require("../Loader"));
45
46var _Overlay = _interopRequireDefault(require("../Overlay"));
47
48var _Token = _interopRequireDefault(require("../Token/Token"));
49
50var _TypeaheadInputMulti = _interopRequireDefault(require("../TypeaheadInputMulti"));
51
52var _TypeaheadInputSingle = _interopRequireDefault(require("../TypeaheadInputSingle"));
53
54var _TypeaheadMenu = _interopRequireDefault(require("../TypeaheadMenu"));
55
56var _utils = require("../../utils");
57
58var _propTypes2 = require("../../propTypes");
59
60var _excluded = ["children", "onRootClose"];
61
62function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
63
64function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
65
66function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
67
68function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
69
70function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
71
72function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
73
74var propTypes = {
75 /**
76 * Displays a button to clear the input when there are selections.
77 */
78 clearButton: _propTypes["default"].bool,
79
80 /**
81 * Props to be applied directly to the input. `onBlur`, `onChange`,
82 * `onFocus`, and `onKeyDown` are ignored.
83 */
84 inputProps: (0, _propTypes2.checkPropType)(_propTypes["default"].object, _propTypes2.inputPropsType),
85
86 /**
87 * Bootstrap 4 only. Adds the `is-invalid` classname to the `form-control`.
88 */
89 isInvalid: _propTypes["default"].bool,
90
91 /**
92 * Indicate whether an asynchronous data fetch is happening.
93 */
94 isLoading: _propTypes["default"].bool,
95
96 /**
97 * Bootstrap 4 only. Adds the `is-valid` classname to the `form-control`.
98 */
99 isValid: _propTypes["default"].bool,
100
101 /**
102 * Callback for custom input rendering.
103 */
104 renderInput: _propTypes["default"].func,
105
106 /**
107 * Callback for custom menu rendering.
108 */
109 renderMenu: _propTypes["default"].func,
110
111 /**
112 * Callback for custom menu rendering.
113 */
114 renderToken: _propTypes["default"].func,
115
116 /**
117 * Specifies the size of the input.
118 */
119 size: _propTypes2.sizeType
120};
121var defaultProps = {
122 isLoading: false
123};
124
125var defaultRenderMenu = function defaultRenderMenu(results, menuProps, props) {
126 return /*#__PURE__*/_react["default"].createElement(_TypeaheadMenu["default"], (0, _extends2["default"])({}, menuProps, {
127 labelKey: props.labelKey,
128 options: results,
129 text: props.text
130 }));
131};
132
133var defaultRenderToken = function defaultRenderToken(option, props, idx) {
134 return /*#__PURE__*/_react["default"].createElement(_Token["default"], {
135 disabled: props.disabled,
136 key: idx,
137 onRemove: props.onRemove,
138 option: option,
139 tabIndex: props.tabIndex
140 }, (0, _utils.getOptionLabel)(option, props.labelKey));
141};
142
143var overlayPropKeys = ['align', 'dropup', 'flip', 'positionFixed'];
144
145function getOverlayProps(props) {
146 return (0, _utils.pick)(props, overlayPropKeys);
147}
148
149var RootClose = function RootClose(_ref) {
150 var children = _ref.children,
151 onRootClose = _ref.onRootClose,
152 props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
153
154 var _useState = (0, _react.useState)(null),
155 _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
156 rootElement = _useState2[0],
157 attachRef = _useState2[1];
158
159 (0, _useRootClose["default"])(rootElement, onRootClose, props);
160 return children(attachRef);
161};
162
163var TypeaheadComponent = /*#__PURE__*/function (_React$Component) {
164 (0, _inherits2["default"])(TypeaheadComponent, _React$Component);
165
166 var _super = _createSuper(TypeaheadComponent);
167
168 function TypeaheadComponent() {
169 var _this;
170
171 (0, _classCallCheck2["default"])(this, TypeaheadComponent);
172
173 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
174 args[_key] = arguments[_key];
175 }
176
177 _this = _super.call.apply(_super, [this].concat(args));
178 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_referenceElement", null);
179 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "referenceElementRef", function (referenceElement) {
180 _this._referenceElement = referenceElement;
181 });
182 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderInput", function (inputProps, props) {
183 var _this$props = _this.props,
184 isInvalid = _this$props.isInvalid,
185 isValid = _this$props.isValid,
186 multiple = _this$props.multiple,
187 renderInput = _this$props.renderInput,
188 renderToken = _this$props.renderToken,
189 size = _this$props.size;
190
191 if ((0, _utils.isFunction)(renderInput)) {
192 return renderInput(inputProps, props);
193 }
194
195 var commonProps = _objectSpread(_objectSpread({}, inputProps), {}, {
196 isInvalid: isInvalid,
197 isValid: isValid,
198 size: size
199 });
200
201 if (!multiple) {
202 return /*#__PURE__*/_react["default"].createElement(_TypeaheadInputSingle["default"], commonProps);
203 }
204
205 var labelKey = props.labelKey,
206 onRemove = props.onRemove,
207 selected = props.selected;
208 return /*#__PURE__*/_react["default"].createElement(_TypeaheadInputMulti["default"], (0, _extends2["default"])({}, commonProps, {
209 placeholder: selected.length ? '' : inputProps.placeholder,
210 selected: selected
211 }), selected.map(function (option, idx) {
212 return (renderToken || defaultRenderToken)(option, _objectSpread(_objectSpread({}, commonProps), {}, {
213 labelKey: labelKey,
214 onRemove: onRemove
215 }), idx);
216 }));
217 });
218 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderMenu", function (results, menuProps, props) {
219 var _this$props2 = _this.props,
220 emptyLabel = _this$props2.emptyLabel,
221 id = _this$props2.id,
222 maxHeight = _this$props2.maxHeight,
223 newSelectionPrefix = _this$props2.newSelectionPrefix,
224 paginationText = _this$props2.paginationText,
225 renderMenu = _this$props2.renderMenu,
226 renderMenuItemChildren = _this$props2.renderMenuItemChildren;
227 return (renderMenu || defaultRenderMenu)(results, _objectSpread(_objectSpread({}, menuProps), {}, {
228 emptyLabel: emptyLabel,
229 id: id,
230 maxHeight: maxHeight,
231 newSelectionPrefix: newSelectionPrefix,
232 paginationText: paginationText,
233 renderMenuItemChildren: renderMenuItemChildren
234 }), props);
235 });
236 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_renderAux", function (_ref2) {
237 var onClear = _ref2.onClear,
238 selected = _ref2.selected;
239 var _this$props3 = _this.props,
240 clearButton = _this$props3.clearButton,
241 disabled = _this$props3.disabled,
242 isLoading = _this$props3.isLoading,
243 size = _this$props3.size;
244 var content;
245
246 if (isLoading) {
247 content = /*#__PURE__*/_react["default"].createElement(_Loader["default"], null);
248 } else if (clearButton && !disabled && selected.length) {
249 content = /*#__PURE__*/_react["default"].createElement(_ClearButton["default"], {
250 onClick: onClear,
251 onMouseDown: _utils.preventInputBlur,
252 size: size
253 });
254 }
255
256 return content ? /*#__PURE__*/_react["default"].createElement("div", {
257 className: (0, _classnames["default"])('rbt-aux', {
258 'rbt-aux-lg': (0, _utils.isSizeLarge)(size)
259 })
260 }, content) : null;
261 });
262 return _this;
263 }
264
265 (0, _createClass2["default"])(TypeaheadComponent, [{
266 key: "render",
267 value: function render() {
268 var _this2 = this;
269
270 var _this$props4 = this.props,
271 children = _this$props4.children,
272 className = _this$props4.className,
273 instanceRef = _this$props4.instanceRef,
274 open = _this$props4.open,
275 options = _this$props4.options,
276 style = _this$props4.style;
277 return /*#__PURE__*/_react["default"].createElement(_Typeahead["default"], (0, _extends2["default"])({}, this.props, {
278 options: options,
279 ref: instanceRef
280 }), function (props) {
281 var hideMenu = props.hideMenu,
282 isMenuShown = props.isMenuShown,
283 results = props.results;
284
285 var auxContent = _this2._renderAux(props);
286
287 return /*#__PURE__*/_react["default"].createElement(RootClose, {
288 disabled: open || !isMenuShown,
289 onRootClose: hideMenu
290 }, function (ref) {
291 return /*#__PURE__*/_react["default"].createElement("div", {
292 className: (0, _classnames["default"])('rbt', {
293 'has-aux': !!auxContent
294 }, className),
295 ref: ref,
296 style: _objectSpread(_objectSpread({}, style), {}, {
297 outline: 'none',
298 position: 'relative'
299 }),
300 tabIndex: -1
301 }, _this2._renderInput(_objectSpread(_objectSpread({}, props.getInputProps(_this2.props.inputProps)), {}, {
302 referenceElementRef: _this2.referenceElementRef
303 }), props), /*#__PURE__*/_react["default"].createElement(_Overlay["default"], (0, _extends2["default"])({}, getOverlayProps(_this2.props), {
304 isMenuShown: isMenuShown,
305 referenceElement: _this2._referenceElement
306 }), function (menuProps) {
307 return _this2._renderMenu(results, menuProps, props);
308 }), auxContent, (0, _utils.isFunction)(children) ? children(props) : children);
309 });
310 });
311 }
312 }]);
313 return TypeaheadComponent;
314}(_react["default"].Component);
315
316(0, _defineProperty2["default"])(TypeaheadComponent, "propTypes", propTypes);
317(0, _defineProperty2["default"])(TypeaheadComponent, "defaultProps", defaultProps);
318
319var _default = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
320 return /*#__PURE__*/_react["default"].createElement(TypeaheadComponent, (0, _extends2["default"])({}, props, {
321 instanceRef: ref
322 }));
323});
324
325exports["default"] = _default;
\No newline at end of file