@entur/dropdown 2.3.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { debounce, useRandomId, warnAboutMissingStyles } from '@entur/utils';
2
- import React, { useState } from 'react';
2
+ import React, { useState, useRef } from 'react';
3
3
  import Downshift, { useSelect } from 'downshift';
4
4
  import classNames from 'classnames';
5
5
  import { BaseFormControl, VariantProvider, FeedbackText } from '@entur/form';
@@ -77,6 +77,44 @@ function _objectWithoutPropertiesLoose(source, excluded) {
77
77
  return target;
78
78
  }
79
79
 
80
+ function _unsupportedIterableToArray(o, minLen) {
81
+ if (!o) return;
82
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
83
+ var n = Object.prototype.toString.call(o).slice(8, -1);
84
+ if (n === "Object" && o.constructor) n = o.constructor.name;
85
+ if (n === "Map" || n === "Set") return Array.from(o);
86
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
87
+ }
88
+
89
+ function _arrayLikeToArray(arr, len) {
90
+ if (len == null || len > arr.length) len = arr.length;
91
+
92
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
93
+
94
+ return arr2;
95
+ }
96
+
97
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
98
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
99
+ if (it) return (it = it.call(o)).next.bind(it);
100
+
101
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
102
+ if (it) o = it;
103
+ var i = 0;
104
+ return function () {
105
+ if (i >= o.length) return {
106
+ done: true
107
+ };
108
+ return {
109
+ done: false,
110
+ value: o[i++]
111
+ };
112
+ };
113
+ }
114
+
115
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
116
+ }
117
+
80
118
  var _excluded$8 = ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"];
81
119
  var DownshiftContext = /*#__PURE__*/React.createContext(null);
82
120
  var DownshiftProvider = function DownshiftProvider(_ref) {
@@ -435,8 +473,14 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
435
473
  selectHighlightedItem = _useDownshift.selectHighlightedItem,
436
474
  isOpen = _useDownshift.isOpen,
437
475
  openMenu = _useDownshift.openMenu,
476
+ closeMenu = _useDownshift.closeMenu,
438
477
  selectedItem = _useDownshift.selectedItem;
439
478
 
479
+ var _useState = useState(false),
480
+ hideSelectedItem = _useState[0],
481
+ setHideSelectedItem = _useState[1];
482
+
483
+ var inputRef = useRef(null);
440
484
  var filteredItems = React.useMemo(function () {
441
485
  return items.filter(function (item) {
442
486
  return itemFilter(item, inputValue);
@@ -455,28 +499,52 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
455
499
  label: label,
456
500
  isFilled: selectedItem ? true : false,
457
501
  disableLabelAnimation: disableLabelAnimation
458
- }, selectedItem && !inputValue && React.createElement("span", {
459
- className: "eds-dropdown__searchable-selected-item"
460
- }, selectedItem.label), React.createElement("input", _extends({}, getInputProps(_extends({
502
+ }, !hideSelectedItem && selectedItem && !inputValue && React.createElement("span", {
503
+ className: "eds-dropdown__searchable-selected-item__wrapper"
504
+ }, React.createElement("span", {
505
+ className: "eds-dropdown__searchable-selected-item",
506
+ onClick: function onClick() {
507
+ var _inputRef$current;
508
+
509
+ return (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
510
+ }
511
+ }, selectedItem.label)), React.createElement("input", _extends({}, getInputProps(_extends({
461
512
  disabled: disabled,
462
513
  readOnly: readOnly,
463
514
  className: 'eds-form-control eds-dropdown__input',
464
515
  onKeyDown: function onKeyDown(e) {
465
- if (selectOnTab && e.key === 'Tab') {
466
- selectHighlightedItem();
467
- }
516
+ if (selectOnTab && e.key === 'Tab') selectHighlightedItem();
468
517
  },
469
518
  onFocus: function onFocus() {
470
- if (openOnFocus) {
471
- !isOpen && openMenu();
472
- }
519
+ if (!isOpen && openOnFocus) openMenu();
520
+ setHideSelectedItem(true);
473
521
  },
474
- placeholder: selectedItem ? undefined : placeholder
522
+ placeholder: selectedItem ? selectedItem.label : placeholder
475
523
  }, rest)), {
476
- ref: ref
524
+ onBlur: function onBlur() {
525
+ setHideSelectedItem(false);
526
+ closeMenu();
527
+ },
528
+ ref: mergeRefs(ref, inputRef)
477
529
  })));
478
530
  });
479
531
 
532
+ var mergeRefs = function mergeRefs() {
533
+ for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
534
+ refs[_key] = arguments[_key];
535
+ }
536
+
537
+ return function (node) {
538
+ for (var _iterator = _createForOfIteratorHelperLoose(refs), _step; !(_step = _iterator()).done;) {
539
+ var ref = _step.value;
540
+
541
+ if (typeof ref === 'function') {
542
+ ref(node);
543
+ } else if (ref) ref.current = node;
544
+ }
545
+ };
546
+ };
547
+
480
548
  var DropdownInputGroup = function DropdownInputGroup(_ref) {
481
549
  var children = _ref.children,
482
550
  feedback = _ref.feedback,