UNPKG

5.63 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 _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
14var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
16var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
17
18var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
20var _classnames = _interopRequireDefault(require("classnames"));
21
22var _react = _interopRequireDefault(require("react"));
23
24var _Hint = _interopRequireDefault(require("./Hint"));
25
26var _Input = _interopRequireDefault(require("./Input"));
27
28var _utils = require("../utils");
29
30var _classNames = _interopRequireDefault(require("../behaviors/classNames"));
31
32var _constants = require("../constants");
33
34/* eslint-disable jsx-a11y/no-static-element-interactions */
35
36/* eslint-disable jsx-a11y/click-events-have-key-events */
37var TypeaheadInputMulti = /*#__PURE__*/function (_React$Component) {
38 (0, _inheritsLoose2["default"])(TypeaheadInputMulti, _React$Component);
39
40 function TypeaheadInputMulti() {
41 var _this;
42
43 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
44 args[_key] = arguments[_key];
45 }
46
47 _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
48 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "wrapperRef", /*#__PURE__*/_react["default"].createRef());
49 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_input", void 0);
50 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getInputRef", function (input) {
51 _this._input = input;
52
53 _this.props.inputRef(input);
54 });
55 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleContainerClickOrFocus", function (e) {
56 // Don't focus the input if it's disabled.
57 if (_this.props.disabled) {
58 e.currentTarget.blur();
59 return;
60 } // Move cursor to the end if the user clicks outside the actual input.
61
62
63 var inputNode = _this._input;
64
65 if (!inputNode) {
66 return;
67 }
68
69 if (e.currentTarget !== inputNode && (0, _utils.isSelectable)(inputNode)) {
70 inputNode.selectionStart = inputNode.value.length;
71 }
72
73 inputNode.focus();
74 });
75 (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_handleKeyDown", function (e) {
76 var _this$props = _this.props,
77 onKeyDown = _this$props.onKeyDown,
78 selected = _this$props.selected,
79 value = _this$props.value;
80
81 switch (e.keyCode) {
82 case _constants.BACKSPACE:
83 if (e.currentTarget === _this._input && selected.length && !value) {
84 // Prevent browser from going back.
85 e.preventDefault(); // If the input is selected and there is no text, focus the last
86 // token when the user hits backspace.
87
88 if (_this.wrapperRef.current) {
89 var children = _this.wrapperRef.current.children;
90 var lastToken = children[children.length - 2];
91 lastToken && lastToken.focus();
92 }
93 }
94
95 break;
96
97 default:
98 break;
99 }
100
101 onKeyDown(e);
102 });
103 return _this;
104 }
105
106 var _proto = TypeaheadInputMulti.prototype;
107
108 _proto.render = function render() {
109 var _this$props2 = this.props,
110 children = _this$props2.children,
111 className = _this$props2.className,
112 inputClassName = _this$props2.inputClassName,
113 inputRef = _this$props2.inputRef,
114 placeholder = _this$props2.placeholder,
115 referenceElementRef = _this$props2.referenceElementRef,
116 selected = _this$props2.selected,
117 shouldSelectHint = _this$props2.shouldSelectHint,
118 props = (0, _objectWithoutPropertiesLoose2["default"])(_this$props2, ["children", "className", "inputClassName", "inputRef", "placeholder", "referenceElementRef", "selected", "shouldSelectHint"]);
119 return /*#__PURE__*/_react["default"].createElement("div", {
120 className: (0, _classnames["default"])('rbt-input-multi', className),
121 disabled: props.disabled,
122 onClick: this._handleContainerClickOrFocus,
123 onFocus: this._handleContainerClickOrFocus,
124 ref: referenceElementRef,
125 tabIndex: -1
126 }, /*#__PURE__*/_react["default"].createElement("div", {
127 className: "rbt-input-wrapper",
128 ref: this.wrapperRef
129 }, children, /*#__PURE__*/_react["default"].createElement(_Hint["default"], {
130 shouldSelect: shouldSelectHint
131 }, /*#__PURE__*/_react["default"].createElement(_Input["default"], (0, _extends2["default"])({}, props, {
132 className: inputClassName,
133 onKeyDown: this._handleKeyDown,
134 placeholder: selected.length ? '' : placeholder,
135 ref: this.getInputRef,
136 style: {
137 backgroundColor: 'transparent',
138 border: 0,
139 boxShadow: 'none',
140 cursor: 'inherit',
141 outline: 'none',
142 padding: 0,
143 width: '100%',
144 zIndex: 1
145 }
146 })))));
147 };
148
149 return TypeaheadInputMulti;
150}(_react["default"].Component);
151
152var _default = (0, _classNames["default"])(TypeaheadInputMulti);
153
154exports["default"] = _default;
\No newline at end of file