UNPKG

2.33 kBJavaScriptView Raw
1import _extends from "@babel/runtime/helpers/extends";
2import React, { useEffect } from 'react';
3import usePrevious from '@restart/hooks/usePrevious';
4import { TypeaheadContext } from './Context';
5import { getHintText, getInputProps, getInputText, getIsOnlyResult, pick } from '../utils';
6import { RETURN } from '../constants';
7var inputPropKeys = ['activeIndex', 'disabled', 'id', 'inputRef', 'isFocused', 'isMenuShown', 'multiple', 'onBlur', 'onChange', 'onFocus', 'onKeyDown', 'placeholder'];
8var propKeys = ['activeIndex', 'hideMenu', 'isMenuShown', 'labelKey', 'onClear', 'onHide', 'onRemove', 'results', 'selected', 'text', 'toggleMenu'];
9var contextKeys = ['activeIndex', 'id', 'initialItem', 'inputNode', 'onActiveItemChange', 'onAdd', 'onInitialItemChange', 'onMenuItemClick', 'selectHintOnEnter', 'setItem'];
10
11var TypeaheadManager = function TypeaheadManager(props) {
12 var allowNew = props.allowNew,
13 children = props.children,
14 initialItem = props.initialItem,
15 isMenuShown = props.isMenuShown,
16 onAdd = props.onAdd,
17 onInitialItemChange = props.onInitialItemChange,
18 onKeyDown = props.onKeyDown,
19 onMenuToggle = props.onMenuToggle,
20 results = props.results;
21 var prevProps = usePrevious(props);
22 useEffect(function () {
23 // Clear the initial item when there are no results.
24 if (!(allowNew || results.length)) {
25 onInitialItemChange(null);
26 }
27 });
28 useEffect(function () {
29 if (prevProps && prevProps.isMenuShown !== isMenuShown) {
30 onMenuToggle(isMenuShown);
31 }
32 });
33
34 var handleKeyDown = function handleKeyDown(e) {
35 switch (e.keyCode) {
36 case RETURN:
37 if (initialItem && getIsOnlyResult(props)) {
38 onAdd(initialItem);
39 }
40
41 break;
42
43 default:
44 break;
45 }
46
47 onKeyDown(e);
48 };
49
50 var childProps = _extends({}, pick(props, propKeys), {
51 getInputProps: getInputProps(_extends({}, pick(props, inputPropKeys), {
52 onKeyDown: handleKeyDown,
53 value: getInputText(props)
54 }))
55 });
56
57 var contextValue = _extends({}, pick(props, contextKeys), {
58 hintText: getHintText(props),
59 isOnlyResult: getIsOnlyResult(props)
60 });
61
62 return /*#__PURE__*/React.createElement(TypeaheadContext.Provider, {
63 value: contextValue
64 }, children(childProps));
65};
66
67export default TypeaheadManager;
\No newline at end of file