@entur/dropdown 7.2.3-beta.0 → 7.3.1

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.
@@ -425,7 +425,9 @@ var DropdownList = function DropdownList(_ref) {
425
425
  checked: selectAllCheckboxState == null ? void 0 : selectAllCheckboxState(),
426
426
  className: "eds-dropdown__list__item__checkbox",
427
427
  tabIndex: -1,
428
- readOnly: true
428
+ onChange: function onChange() {
429
+ return undefined;
430
+ }
429
431
  }), React.createElement("span", {
430
432
  className: "eds-dropdown__list__item__text",
431
433
  "aria-label": ariaValuesSelectAll().label
@@ -440,7 +442,9 @@ var DropdownList = function DropdownList(_ref) {
440
442
  checked: isItemSelected(item),
441
443
  className: "eds-dropdown__list__item__checkbox",
442
444
  tabIndex: -1,
443
- readOnly: true
445
+ onChange: function onChange() {
446
+ return undefined;
447
+ }
444
448
  }), React.createElement("span", {
445
449
  className: "eds-dropdown__list__item__text"
446
450
  }, item.label, React.createElement(a11y.VisuallyHidden, null, isItemSelected(item) ? ariaLabelSelectedItem : '')), Array.isArray(item.icons) ? item.icons.filter(isReactComponent).map(function (Icon, index) {
@@ -1039,9 +1043,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1039
1043
  inputValue: changes.inputValue
1040
1044
  });
1041
1045
  },
1042
- onStateChange: function onStateChange(_ref6) {
1046
+ onSelectedItemChange: function onSelectedItemChange(_ref6) {
1043
1047
  var newSelectedItem = _ref6.selectedItem;
1044
- if (newSelectedItem === undefined) return;
1045
1048
  onChange(newSelectedItem);
1046
1049
  },
1047
1050
  // Accessibility
@@ -1051,7 +1054,6 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1051
1054
  }));
1052
1055
  }
1053
1056
  }),
1054
- closeMenu = _useCombobox.closeMenu,
1055
1057
  isOpen = _useCombobox.isOpen,
1056
1058
  getToggleButtonProps = _useCombobox.getToggleButtonProps,
1057
1059
  getLabelProps = _useCombobox.getLabelProps,
@@ -1061,7 +1063,9 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1061
1063
  getItemProps = _useCombobox.getItemProps,
1062
1064
  selectedItem = _useCombobox.selectedItem,
1063
1065
  inputValue = _useCombobox.inputValue,
1064
- setInputValue = _useCombobox.setInputValue;
1066
+ setInputValue = _useCombobox.setInputValue,
1067
+ selectItem = _useCombobox.selectItem,
1068
+ reset = _useCombobox.reset;
1065
1069
  // calculations for floating-UI popover position
1066
1070
  var _useFloating = reactDom.useFloating({
1067
1071
  open: isOpen,
@@ -1098,13 +1102,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1098
1102
  }, [isOpen, refs.reference, refs.floating, update]);
1099
1103
  var handleOnClear = function handleOnClear() {
1100
1104
  var _inputRef$current;
1101
- onChange(null);
1102
- setInputValue(EMPTY_INPUT);
1103
1105
  (_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
1104
- updateListItems({
1105
- inputValue: inputValue
1106
- });
1107
- setShowSelectedItem(false);
1106
+ reset();
1108
1107
  };
1109
1108
  return React.createElement(form.BaseFormControl, _extends({
1110
1109
  className: classNames('eds-dropdown', 'eds-dropdown--searchable', className, {
@@ -1172,10 +1171,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1172
1171
  var highlitedItem = listItems[highlightedIndex];
1173
1172
  // we don't want to clear selection with tab
1174
1173
  if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1175
- onChange == null || onChange(highlitedItem);
1174
+ selectItem(highlitedItem);
1176
1175
  }
1177
- closeMenu();
1178
- e.preventDefault();
1179
1176
  }
1180
1177
  },
1181
1178
  onBlur: function onBlur() {
@@ -1210,7 +1207,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1210
1207
 
1211
1208
  var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "hideSelectAll", "items", "itemFilter", "label", "labelAllItemsSelected", "labelClearAllItems", "labelSelectAll", "labelTooltip", "listStyle", "loading", "loadingText", "maxChips", "noMatchesText", "onChange", "placeholder", "readOnly", "selectedItems", "selectOnBlur", "selectOnTab", "style", "variant", "ariaLabelChosenSingular", "ariaLabelChosenPlural", "ariaLabelCloseList", "ariaLabelJumpToInput", "ariaLabelOpenList", "ariaLabelRemoveSelected", "ariaLabelSelectedItem"];
1212
1209
  var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1213
- var _inputRef$current5;
1210
+ var _inputRef$current4;
1214
1211
  var className = _ref.className,
1215
1212
  _ref$clearable = _ref.clearable,
1216
1213
  clearable = _ref$clearable === void 0 ? true : _ref$clearable,
@@ -1324,21 +1321,25 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1324
1321
  }),
1325
1322
  hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
1326
1323
  handleListItemClicked = _useMultiselectUtils.handleListItemClicked,
1327
- selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState;
1324
+ selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState,
1325
+ clickedItemIsInSelectedItems = _useMultiselectUtils.clickedItemIsInSelectedItems,
1326
+ clickedItemIsSelectAll = _useMultiselectUtils.clickedItemIsSelectAll;
1328
1327
  var _useMultipleSelection = downshift.useMultipleSelection({
1329
1328
  selectedItems: selectedItems,
1330
1329
  // @ts-expect-error prop missing from library types
1331
1330
  itemToString: itemToString,
1332
1331
  itemToKey: itemToKey,
1333
- onStateChange: function onStateChange(_ref4) {
1332
+ onSelectedItemsChange: function onSelectedItemsChange(_ref4) {
1334
1333
  var newSelectedItems = _ref4.selectedItems;
1335
- if (newSelectedItems !== undefined) onChange(newSelectedItems);
1334
+ onChange(newSelectedItems);
1336
1335
  }
1337
1336
  }),
1338
1337
  getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1339
- getDropdownProps = _useMultipleSelection.getDropdownProps;
1338
+ getDropdownProps = _useMultipleSelection.getDropdownProps,
1339
+ reset = _useMultipleSelection.reset,
1340
+ _removeSelectedItem = _useMultipleSelection.removeSelectedItem,
1341
+ setSelectedItems = _useMultipleSelection.setSelectedItems;
1340
1342
  var stateReducer = React.useCallback(function (state, _ref5) {
1341
- var _inputRef$current;
1342
1343
  var changes = _ref5.changes,
1343
1344
  type = _ref5.type;
1344
1345
  if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
@@ -1347,7 +1348,6 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1347
1348
  switch (type) {
1348
1349
  // reset input value when leaving input field
1349
1350
  case downshift.useCombobox.stateChangeTypes.InputBlur:
1350
- if (state.isOpen) (_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
1351
1351
  return _extends({}, changes, {
1352
1352
  inputValue: EMPTY_INPUT
1353
1353
  });
@@ -1355,18 +1355,18 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1355
1355
  case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1356
1356
  case downshift.useCombobox.stateChangeTypes.ItemClick:
1357
1357
  {
1358
- var _inputRef$current$val, _inputRef$current2;
1358
+ var _inputRef$current$val, _inputRef$current;
1359
1359
  return _extends({}, changes, {
1360
1360
  isOpen: true,
1361
- inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val = inputRef == null || (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val : EMPTY_INPUT
1361
+ inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val = inputRef == null || (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : EMPTY_INPUT
1362
1362
  });
1363
1363
  }
1364
1364
  // edit input value when selected items is updated outside component
1365
1365
  case downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1366
1366
  {
1367
- var _inputRef$current$val2, _inputRef$current3;
1367
+ var _inputRef$current$val2, _inputRef$current2;
1368
1368
  return _extends({}, changes, {
1369
- inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1369
+ inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1370
1370
  });
1371
1371
  }
1372
1372
  // remove leading whitespace, select item with spacebar if input is empty and filter list items
@@ -1411,13 +1411,13 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1411
1411
  setHighlightedIndex(hideSelectAll ? 0 : 1);
1412
1412
  setLastHighlightedIndex(hideSelectAll ? 0 : 1);
1413
1413
  },
1414
- onStateChange: function onStateChange(_ref6) {
1414
+ onSelectedItemChange: function onSelectedItemChange(_ref6) {
1415
1415
  var clickedItem = _ref6.selectedItem;
1416
1416
  // clickedItem means item chosen either via mouse or keyboard
1417
1417
  if (!clickedItem) return;
1418
1418
  handleListItemClicked({
1419
1419
  clickedItem: clickedItem,
1420
- onChange: onChange
1420
+ onChange: setSelectedItems
1421
1421
  });
1422
1422
  },
1423
1423
  // Accessibility
@@ -1473,13 +1473,9 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1473
1473
  }
1474
1474
  }, [isOpen, refs.reference, refs.floating, update]);
1475
1475
  var handleOnClear = function handleOnClear() {
1476
- var _inputRef$current4;
1477
- onChange([]);
1478
- setInputValue(EMPTY_INPUT);
1479
- (_inputRef$current4 = inputRef.current) == null || _inputRef$current4.focus();
1480
- updateListItems({
1481
- inputValue: inputValue
1482
- });
1476
+ var _inputRef$current3;
1477
+ (_inputRef$current3 = inputRef.current) == null || _inputRef$current3.focus();
1478
+ reset();
1483
1479
  };
1484
1480
  return React.createElement(form.BaseFormControl, _extends({
1485
1481
  className: classNames('eds-dropdown', 'eds-dropdown--multiselect', className, {
@@ -1530,7 +1526,7 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1530
1526
  'eds-dropdown--multiselect__selected-items-and-input--filled': hasSelectedItems
1531
1527
  })
1532
1528
  }, selectedItems.length > 1 ? React.createElement(a11y.VisuallyHidden, {
1533
- onClick: (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus
1529
+ onClick: (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus
1534
1530
  }, ariaLabelJumpToInput) : null, selectedItems.length <= maxChips ? selectedItems.map(function (selectedItem, index) {
1535
1531
  return React.createElement(SelectedItemTag, {
1536
1532
  ariaLabelChosen: ariaLabelChosenSingular,
@@ -1541,12 +1537,9 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1541
1537
  key: (selectedItem == null ? void 0 : selectedItem.label) + (typeof (selectedItem == null ? void 0 : selectedItem.value) === 'string' ? selectedItem.value : ''),
1542
1538
  readOnly: readOnly,
1543
1539
  removeSelectedItem: function removeSelectedItem() {
1544
- var _inputRef$current6;
1545
- handleListItemClicked({
1546
- clickedItem: selectedItem,
1547
- onChange: onChange
1548
- });
1549
- inputRef == null || (_inputRef$current6 = inputRef.current) == null || _inputRef$current6.focus();
1540
+ var _inputRef$current5;
1541
+ _removeSelectedItem(selectedItem);
1542
+ inputRef == null || (_inputRef$current5 = inputRef.current) == null || _inputRef$current5.focus();
1550
1543
  },
1551
1544
  selectedItem: selectedItem
1552
1545
  });
@@ -1561,13 +1554,14 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1561
1554
  onKeyDown: function onKeyDown(e) {
1562
1555
  if (selectOnTab && isOpen && e.key === 'Tab') {
1563
1556
  var highlitedItem = listItems[highlightedIndex];
1564
- // we don't want to clear selection with tab
1565
- if (highlitedItem) {
1566
- handleListItemClicked({
1567
- clickedItem: highlitedItem,
1568
- onChange: onChange
1569
- });
1570
- }
1557
+ if (!highlitedItem) return;
1558
+ // Skip tab selection for select all or if item already is selected
1559
+ var shouldSkipTabSelection = clickedItemIsSelectAll(highlitedItem) || !clickedItemIsSelectAll(highlitedItem) && clickedItemIsInSelectedItems(highlitedItem);
1560
+ if (shouldSkipTabSelection) return;
1561
+ handleListItemClicked({
1562
+ clickedItem: highlitedItem,
1563
+ onChange: setSelectedItems
1564
+ });
1571
1565
  }
1572
1566
  }
1573
1567
  }, getDropdownProps({
@@ -1670,13 +1664,13 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1670
1664
  },
1671
1665
  itemToString: itemToString
1672
1666
  }),
1673
- closeMenu = _useSelect.closeMenu,
1674
1667
  isOpen = _useSelect.isOpen,
1675
1668
  getItemProps = _useSelect.getItemProps,
1676
1669
  getLabelProps = _useSelect.getLabelProps,
1677
1670
  getMenuProps = _useSelect.getMenuProps,
1678
1671
  getToggleButtonProps = _useSelect.getToggleButtonProps,
1679
1672
  highlightedIndex = _useSelect.highlightedIndex,
1673
+ selectItem = _useSelect.selectItem,
1680
1674
  reset = _useSelect.reset;
1681
1675
  // calculations for floating-UI popover position
1682
1676
  var _useFloating = reactDom.useFloating({
@@ -1744,10 +1738,8 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1744
1738
  var highlitedItem = normalizedItems[highlightedIndex];
1745
1739
  // we don't want to clear selection with tab
1746
1740
  if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1747
- onChange == null || onChange(highlitedItem);
1741
+ selectItem(highlitedItem);
1748
1742
  }
1749
- closeMenu();
1750
- e.preventDefault();
1751
1743
  }
1752
1744
  }
1753
1745
  }), {