@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.
@@ -421,7 +421,9 @@ var DropdownList = function DropdownList(_ref) {
421
421
  checked: selectAllCheckboxState == null ? void 0 : selectAllCheckboxState(),
422
422
  className: "eds-dropdown__list__item__checkbox",
423
423
  tabIndex: -1,
424
- readOnly: true
424
+ onChange: function onChange() {
425
+ return undefined;
426
+ }
425
427
  }), React.createElement("span", {
426
428
  className: "eds-dropdown__list__item__text",
427
429
  "aria-label": ariaValuesSelectAll().label
@@ -436,7 +438,9 @@ var DropdownList = function DropdownList(_ref) {
436
438
  checked: isItemSelected(item),
437
439
  className: "eds-dropdown__list__item__checkbox",
438
440
  tabIndex: -1,
439
- readOnly: true
441
+ onChange: function onChange() {
442
+ return undefined;
443
+ }
440
444
  }), React.createElement("span", {
441
445
  className: "eds-dropdown__list__item__text"
442
446
  }, item.label, React.createElement(VisuallyHidden, null, isItemSelected(item) ? ariaLabelSelectedItem : '')), Array.isArray(item.icons) ? item.icons.filter(isReactComponent).map(function (Icon, index) {
@@ -1035,9 +1039,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1035
1039
  inputValue: changes.inputValue
1036
1040
  });
1037
1041
  },
1038
- onStateChange: function onStateChange(_ref6) {
1042
+ onSelectedItemChange: function onSelectedItemChange(_ref6) {
1039
1043
  var newSelectedItem = _ref6.selectedItem;
1040
- if (newSelectedItem === undefined) return;
1041
1044
  onChange(newSelectedItem);
1042
1045
  },
1043
1046
  // Accessibility
@@ -1047,7 +1050,6 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1047
1050
  }));
1048
1051
  }
1049
1052
  }),
1050
- closeMenu = _useCombobox.closeMenu,
1051
1053
  isOpen = _useCombobox.isOpen,
1052
1054
  getToggleButtonProps = _useCombobox.getToggleButtonProps,
1053
1055
  getLabelProps = _useCombobox.getLabelProps,
@@ -1057,7 +1059,9 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1057
1059
  getItemProps = _useCombobox.getItemProps,
1058
1060
  selectedItem = _useCombobox.selectedItem,
1059
1061
  inputValue = _useCombobox.inputValue,
1060
- setInputValue = _useCombobox.setInputValue;
1062
+ setInputValue = _useCombobox.setInputValue,
1063
+ selectItem = _useCombobox.selectItem,
1064
+ reset = _useCombobox.reset;
1061
1065
  // calculations for floating-UI popover position
1062
1066
  var _useFloating = useFloating({
1063
1067
  open: isOpen,
@@ -1094,13 +1098,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1094
1098
  }, [isOpen, refs.reference, refs.floating, update]);
1095
1099
  var handleOnClear = function handleOnClear() {
1096
1100
  var _inputRef$current;
1097
- onChange(null);
1098
- setInputValue(EMPTY_INPUT);
1099
1101
  (_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
1100
- updateListItems({
1101
- inputValue: inputValue
1102
- });
1103
- setShowSelectedItem(false);
1102
+ reset();
1104
1103
  };
1105
1104
  return React.createElement(BaseFormControl, _extends({
1106
1105
  className: classNames('eds-dropdown', 'eds-dropdown--searchable', className, {
@@ -1168,10 +1167,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1168
1167
  var highlitedItem = listItems[highlightedIndex];
1169
1168
  // we don't want to clear selection with tab
1170
1169
  if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1171
- onChange == null || onChange(highlitedItem);
1170
+ selectItem(highlitedItem);
1172
1171
  }
1173
- closeMenu();
1174
- e.preventDefault();
1175
1172
  }
1176
1173
  },
1177
1174
  onBlur: function onBlur() {
@@ -1206,7 +1203,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1206
1203
 
1207
1204
  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"];
1208
1205
  var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1209
- var _inputRef$current5;
1206
+ var _inputRef$current4;
1210
1207
  var className = _ref.className,
1211
1208
  _ref$clearable = _ref.clearable,
1212
1209
  clearable = _ref$clearable === void 0 ? true : _ref$clearable,
@@ -1320,21 +1317,25 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1320
1317
  }),
1321
1318
  hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
1322
1319
  handleListItemClicked = _useMultiselectUtils.handleListItemClicked,
1323
- selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState;
1320
+ selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState,
1321
+ clickedItemIsInSelectedItems = _useMultiselectUtils.clickedItemIsInSelectedItems,
1322
+ clickedItemIsSelectAll = _useMultiselectUtils.clickedItemIsSelectAll;
1324
1323
  var _useMultipleSelection = useMultipleSelection({
1325
1324
  selectedItems: selectedItems,
1326
1325
  // @ts-expect-error prop missing from library types
1327
1326
  itemToString: itemToString,
1328
1327
  itemToKey: itemToKey,
1329
- onStateChange: function onStateChange(_ref4) {
1328
+ onSelectedItemsChange: function onSelectedItemsChange(_ref4) {
1330
1329
  var newSelectedItems = _ref4.selectedItems;
1331
- if (newSelectedItems !== undefined) onChange(newSelectedItems);
1330
+ onChange(newSelectedItems);
1332
1331
  }
1333
1332
  }),
1334
1333
  getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1335
- getDropdownProps = _useMultipleSelection.getDropdownProps;
1334
+ getDropdownProps = _useMultipleSelection.getDropdownProps,
1335
+ reset = _useMultipleSelection.reset,
1336
+ _removeSelectedItem = _useMultipleSelection.removeSelectedItem,
1337
+ setSelectedItems = _useMultipleSelection.setSelectedItems;
1336
1338
  var stateReducer = React.useCallback(function (state, _ref5) {
1337
- var _inputRef$current;
1338
1339
  var changes = _ref5.changes,
1339
1340
  type = _ref5.type;
1340
1341
  if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
@@ -1343,7 +1344,6 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1343
1344
  switch (type) {
1344
1345
  // reset input value when leaving input field
1345
1346
  case useCombobox.stateChangeTypes.InputBlur:
1346
- if (state.isOpen) (_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
1347
1347
  return _extends({}, changes, {
1348
1348
  inputValue: EMPTY_INPUT
1349
1349
  });
@@ -1351,18 +1351,18 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1351
1351
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
1352
1352
  case useCombobox.stateChangeTypes.ItemClick:
1353
1353
  {
1354
- var _inputRef$current$val, _inputRef$current2;
1354
+ var _inputRef$current$val, _inputRef$current;
1355
1355
  return _extends({}, changes, {
1356
1356
  isOpen: true,
1357
- 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
1357
+ 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
1358
1358
  });
1359
1359
  }
1360
1360
  // edit input value when selected items is updated outside component
1361
1361
  case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1362
1362
  {
1363
- var _inputRef$current$val2, _inputRef$current3;
1363
+ var _inputRef$current$val2, _inputRef$current2;
1364
1364
  return _extends({}, changes, {
1365
- inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1365
+ inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1366
1366
  });
1367
1367
  }
1368
1368
  // remove leading whitespace, select item with spacebar if input is empty and filter list items
@@ -1407,13 +1407,13 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1407
1407
  setHighlightedIndex(hideSelectAll ? 0 : 1);
1408
1408
  setLastHighlightedIndex(hideSelectAll ? 0 : 1);
1409
1409
  },
1410
- onStateChange: function onStateChange(_ref6) {
1410
+ onSelectedItemChange: function onSelectedItemChange(_ref6) {
1411
1411
  var clickedItem = _ref6.selectedItem;
1412
1412
  // clickedItem means item chosen either via mouse or keyboard
1413
1413
  if (!clickedItem) return;
1414
1414
  handleListItemClicked({
1415
1415
  clickedItem: clickedItem,
1416
- onChange: onChange
1416
+ onChange: setSelectedItems
1417
1417
  });
1418
1418
  },
1419
1419
  // Accessibility
@@ -1469,13 +1469,9 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1469
1469
  }
1470
1470
  }, [isOpen, refs.reference, refs.floating, update]);
1471
1471
  var handleOnClear = function handleOnClear() {
1472
- var _inputRef$current4;
1473
- onChange([]);
1474
- setInputValue(EMPTY_INPUT);
1475
- (_inputRef$current4 = inputRef.current) == null || _inputRef$current4.focus();
1476
- updateListItems({
1477
- inputValue: inputValue
1478
- });
1472
+ var _inputRef$current3;
1473
+ (_inputRef$current3 = inputRef.current) == null || _inputRef$current3.focus();
1474
+ reset();
1479
1475
  };
1480
1476
  return React.createElement(BaseFormControl, _extends({
1481
1477
  className: classNames('eds-dropdown', 'eds-dropdown--multiselect', className, {
@@ -1526,7 +1522,7 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1526
1522
  'eds-dropdown--multiselect__selected-items-and-input--filled': hasSelectedItems
1527
1523
  })
1528
1524
  }, selectedItems.length > 1 ? React.createElement(VisuallyHidden, {
1529
- onClick: (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus
1525
+ onClick: (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus
1530
1526
  }, ariaLabelJumpToInput) : null, selectedItems.length <= maxChips ? selectedItems.map(function (selectedItem, index) {
1531
1527
  return React.createElement(SelectedItemTag, {
1532
1528
  ariaLabelChosen: ariaLabelChosenSingular,
@@ -1537,12 +1533,9 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1537
1533
  key: (selectedItem == null ? void 0 : selectedItem.label) + (typeof (selectedItem == null ? void 0 : selectedItem.value) === 'string' ? selectedItem.value : ''),
1538
1534
  readOnly: readOnly,
1539
1535
  removeSelectedItem: function removeSelectedItem() {
1540
- var _inputRef$current6;
1541
- handleListItemClicked({
1542
- clickedItem: selectedItem,
1543
- onChange: onChange
1544
- });
1545
- inputRef == null || (_inputRef$current6 = inputRef.current) == null || _inputRef$current6.focus();
1536
+ var _inputRef$current5;
1537
+ _removeSelectedItem(selectedItem);
1538
+ inputRef == null || (_inputRef$current5 = inputRef.current) == null || _inputRef$current5.focus();
1546
1539
  },
1547
1540
  selectedItem: selectedItem
1548
1541
  });
@@ -1557,13 +1550,14 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1557
1550
  onKeyDown: function onKeyDown(e) {
1558
1551
  if (selectOnTab && isOpen && e.key === 'Tab') {
1559
1552
  var highlitedItem = listItems[highlightedIndex];
1560
- // we don't want to clear selection with tab
1561
- if (highlitedItem) {
1562
- handleListItemClicked({
1563
- clickedItem: highlitedItem,
1564
- onChange: onChange
1565
- });
1566
- }
1553
+ if (!highlitedItem) return;
1554
+ // Skip tab selection for select all or if item already is selected
1555
+ var shouldSkipTabSelection = clickedItemIsSelectAll(highlitedItem) || !clickedItemIsSelectAll(highlitedItem) && clickedItemIsInSelectedItems(highlitedItem);
1556
+ if (shouldSkipTabSelection) return;
1557
+ handleListItemClicked({
1558
+ clickedItem: highlitedItem,
1559
+ onChange: setSelectedItems
1560
+ });
1567
1561
  }
1568
1562
  }
1569
1563
  }, getDropdownProps({
@@ -1666,13 +1660,13 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1666
1660
  },
1667
1661
  itemToString: itemToString
1668
1662
  }),
1669
- closeMenu = _useSelect.closeMenu,
1670
1663
  isOpen = _useSelect.isOpen,
1671
1664
  getItemProps = _useSelect.getItemProps,
1672
1665
  getLabelProps = _useSelect.getLabelProps,
1673
1666
  getMenuProps = _useSelect.getMenuProps,
1674
1667
  getToggleButtonProps = _useSelect.getToggleButtonProps,
1675
1668
  highlightedIndex = _useSelect.highlightedIndex,
1669
+ selectItem = _useSelect.selectItem,
1676
1670
  reset = _useSelect.reset;
1677
1671
  // calculations for floating-UI popover position
1678
1672
  var _useFloating = useFloating({
@@ -1740,10 +1734,8 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1740
1734
  var highlitedItem = normalizedItems[highlightedIndex];
1741
1735
  // we don't want to clear selection with tab
1742
1736
  if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1743
- onChange == null || onChange(highlitedItem);
1737
+ selectItem(highlitedItem);
1744
1738
  }
1745
- closeMenu();
1746
- e.preventDefault();
1747
1739
  }
1748
1740
  }
1749
1741
  }), {