UNPKG

2.88 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 _react = _interopRequireWildcard(require("react"));
15
16var _usePrevious = _interopRequireDefault(require("@restart/hooks/usePrevious"));
17
18var _Context = require("./Context");
19
20var _utils = require("../utils");
21
22var _constants = require("../constants");
23
24var inputPropKeys = ['activeIndex', 'disabled', 'id', 'inputRef', 'isFocused', 'isMenuShown', 'multiple', 'onBlur', 'onChange', 'onFocus', 'onKeyDown', 'placeholder'];
25var propKeys = ['activeIndex', 'hideMenu', 'isMenuShown', 'labelKey', 'onClear', 'onHide', 'onRemove', 'results', 'selected', 'text', 'toggleMenu'];
26var contextKeys = ['activeIndex', 'id', 'initialItem', 'inputNode', 'onActiveItemChange', 'onAdd', 'onInitialItemChange', 'onMenuItemClick', 'selectHintOnEnter', 'setItem'];
27
28var TypeaheadManager = function TypeaheadManager(props) {
29 var allowNew = props.allowNew,
30 children = props.children,
31 initialItem = props.initialItem,
32 isMenuShown = props.isMenuShown,
33 onAdd = props.onAdd,
34 onInitialItemChange = props.onInitialItemChange,
35 onKeyDown = props.onKeyDown,
36 onMenuToggle = props.onMenuToggle,
37 results = props.results;
38 var prevProps = (0, _usePrevious["default"])(props);
39 (0, _react.useEffect)(function () {
40 // Clear the initial item when there are no results.
41 if (!(allowNew || results.length)) {
42 onInitialItemChange(null);
43 }
44 });
45 (0, _react.useEffect)(function () {
46 if (prevProps && prevProps.isMenuShown !== isMenuShown) {
47 onMenuToggle(isMenuShown);
48 }
49 });
50
51 var handleKeyDown = function handleKeyDown(e) {
52 switch (e.keyCode) {
53 case _constants.RETURN:
54 if (initialItem && (0, _utils.getIsOnlyResult)(props)) {
55 onAdd(initialItem);
56 }
57
58 break;
59
60 default:
61 break;
62 }
63
64 onKeyDown(e);
65 };
66
67 var childProps = (0, _extends2["default"])({}, (0, _utils.pick)(props, propKeys), {
68 getInputProps: (0, _utils.getInputProps)((0, _extends2["default"])({}, (0, _utils.pick)(props, inputPropKeys), {
69 onKeyDown: handleKeyDown,
70 value: (0, _utils.getInputText)(props)
71 }))
72 });
73 var contextValue = (0, _extends2["default"])({}, (0, _utils.pick)(props, contextKeys), {
74 hintText: (0, _utils.getHintText)(props),
75 isOnlyResult: (0, _utils.getIsOnlyResult)(props)
76 });
77 return /*#__PURE__*/_react["default"].createElement(_Context.TypeaheadContext.Provider, {
78 value: contextValue
79 }, children(childProps));
80};
81
82var _default = TypeaheadManager;
83exports["default"] = _default;
\No newline at end of file