@entur/dropdown 7.2.2 → 7.3.0

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, {
@@ -1169,10 +1168,8 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1169
1168
  var highlitedItem = listItems[highlightedIndex];
1170
1169
  // we don't want to clear selection with tab
1171
1170
  if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1172
- onChange == null || onChange(highlitedItem);
1171
+ selectItem(highlitedItem);
1173
1172
  }
1174
- closeMenu();
1175
- e.preventDefault();
1176
1173
  }
1177
1174
  },
1178
1175
  onBlur: function onBlur() {
@@ -1207,7 +1204,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1207
1204
 
1208
1205
  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"];
1209
1206
  var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1210
- var _inputRef$current5;
1207
+ var _inputRef$current4;
1211
1208
  var className = _ref.className,
1212
1209
  _ref$clearable = _ref.clearable,
1213
1210
  clearable = _ref$clearable === void 0 ? true : _ref$clearable,
@@ -1321,21 +1318,25 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1321
1318
  }),
1322
1319
  hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
1323
1320
  handleListItemClicked = _useMultiselectUtils.handleListItemClicked,
1324
- selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState;
1321
+ selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState,
1322
+ clickedItemIsInSelectedItems = _useMultiselectUtils.clickedItemIsInSelectedItems,
1323
+ clickedItemIsSelectAll = _useMultiselectUtils.clickedItemIsSelectAll;
1325
1324
  var _useMultipleSelection = downshift.useMultipleSelection({
1326
1325
  selectedItems: selectedItems,
1327
1326
  // @ts-expect-error prop missing from library types
1328
1327
  itemToString: itemToString,
1329
1328
  itemToKey: itemToKey,
1330
- onStateChange: function onStateChange(_ref4) {
1329
+ onSelectedItemsChange: function onSelectedItemsChange(_ref4) {
1331
1330
  var newSelectedItems = _ref4.selectedItems;
1332
- if (newSelectedItems !== undefined) onChange(newSelectedItems);
1331
+ onChange(newSelectedItems);
1333
1332
  }
1334
1333
  }),
1335
1334
  getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1336
- getDropdownProps = _useMultipleSelection.getDropdownProps;
1335
+ getDropdownProps = _useMultipleSelection.getDropdownProps,
1336
+ reset = _useMultipleSelection.reset,
1337
+ _removeSelectedItem = _useMultipleSelection.removeSelectedItem,
1338
+ setSelectedItems = _useMultipleSelection.setSelectedItems;
1337
1339
  var stateReducer = React.useCallback(function (state, _ref5) {
1338
- var _inputRef$current;
1339
1340
  var changes = _ref5.changes,
1340
1341
  type = _ref5.type;
1341
1342
  if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
@@ -1344,7 +1345,6 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1344
1345
  switch (type) {
1345
1346
  // reset input value when leaving input field
1346
1347
  case downshift.useCombobox.stateChangeTypes.InputBlur:
1347
- if (state.isOpen) (_inputRef$current = inputRef.current) == null || _inputRef$current.focus();
1348
1348
  return _extends({}, changes, {
1349
1349
  inputValue: EMPTY_INPUT
1350
1350
  });
@@ -1352,18 +1352,18 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1352
1352
  case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1353
1353
  case downshift.useCombobox.stateChangeTypes.ItemClick:
1354
1354
  {
1355
- var _inputRef$current$val, _inputRef$current2;
1355
+ var _inputRef$current$val, _inputRef$current;
1356
1356
  return _extends({}, changes, {
1357
1357
  isOpen: true,
1358
- 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
1358
+ 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
1359
1359
  });
1360
1360
  }
1361
1361
  // edit input value when selected items is updated outside component
1362
1362
  case downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1363
1363
  {
1364
- var _inputRef$current$val2, _inputRef$current3;
1364
+ var _inputRef$current$val2, _inputRef$current2;
1365
1365
  return _extends({}, changes, {
1366
- inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1366
+ inputValue: (_inputRef$current$val2 = inputRef == null || (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
1367
1367
  });
1368
1368
  }
1369
1369
  // remove leading whitespace, select item with spacebar if input is empty and filter list items
@@ -1408,13 +1408,13 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1408
1408
  setHighlightedIndex(hideSelectAll ? 0 : 1);
1409
1409
  setLastHighlightedIndex(hideSelectAll ? 0 : 1);
1410
1410
  },
1411
- onStateChange: function onStateChange(_ref6) {
1411
+ onSelectedItemChange: function onSelectedItemChange(_ref6) {
1412
1412
  var clickedItem = _ref6.selectedItem;
1413
1413
  // clickedItem means item chosen either via mouse or keyboard
1414
1414
  if (!clickedItem) return;
1415
1415
  handleListItemClicked({
1416
1416
  clickedItem: clickedItem,
1417
- onChange: onChange
1417
+ onChange: setSelectedItems
1418
1418
  });
1419
1419
  },
1420
1420
  // Accessibility
@@ -1470,13 +1470,9 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1470
1470
  }
1471
1471
  }, [isOpen, refs.reference, refs.floating, update]);
1472
1472
  var handleOnClear = function handleOnClear() {
1473
- var _inputRef$current4;
1474
- onChange([]);
1475
- setInputValue(EMPTY_INPUT);
1476
- (_inputRef$current4 = inputRef.current) == null || _inputRef$current4.focus();
1477
- updateListItems({
1478
- inputValue: inputValue
1479
- });
1473
+ var _inputRef$current3;
1474
+ (_inputRef$current3 = inputRef.current) == null || _inputRef$current3.focus();
1475
+ reset();
1480
1476
  };
1481
1477
  return React.createElement(form.BaseFormControl, _extends({
1482
1478
  className: classNames('eds-dropdown', 'eds-dropdown--multiselect', className, {
@@ -1527,7 +1523,7 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1527
1523
  'eds-dropdown--multiselect__selected-items-and-input--filled': hasSelectedItems
1528
1524
  })
1529
1525
  }, selectedItems.length > 1 ? React.createElement(a11y.VisuallyHidden, {
1530
- onClick: (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus
1526
+ onClick: (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus
1531
1527
  }, ariaLabelJumpToInput) : null, selectedItems.length <= maxChips ? selectedItems.map(function (selectedItem, index) {
1532
1528
  return React.createElement(SelectedItemTag, {
1533
1529
  ariaLabelChosen: ariaLabelChosenSingular,
@@ -1538,12 +1534,9 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1538
1534
  key: (selectedItem == null ? void 0 : selectedItem.label) + (typeof (selectedItem == null ? void 0 : selectedItem.value) === 'string' ? selectedItem.value : ''),
1539
1535
  readOnly: readOnly,
1540
1536
  removeSelectedItem: function removeSelectedItem() {
1541
- var _inputRef$current6;
1542
- handleListItemClicked({
1543
- clickedItem: selectedItem,
1544
- onChange: onChange
1545
- });
1546
- inputRef == null || (_inputRef$current6 = inputRef.current) == null || _inputRef$current6.focus();
1537
+ var _inputRef$current5;
1538
+ _removeSelectedItem(selectedItem);
1539
+ inputRef == null || (_inputRef$current5 = inputRef.current) == null || _inputRef$current5.focus();
1547
1540
  },
1548
1541
  selectedItem: selectedItem
1549
1542
  });
@@ -1558,13 +1551,14 @@ var MultiSelect = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1558
1551
  onKeyDown: function onKeyDown(e) {
1559
1552
  if (selectOnTab && isOpen && e.key === 'Tab') {
1560
1553
  var highlitedItem = listItems[highlightedIndex];
1561
- // we don't want to clear selection with tab
1562
- if (highlitedItem) {
1563
- handleListItemClicked({
1564
- clickedItem: highlitedItem,
1565
- onChange: onChange
1566
- });
1567
- }
1554
+ if (!highlitedItem) return;
1555
+ // Skip tab selection for select all or if item already is selected
1556
+ var shouldSkipTabSelection = clickedItemIsSelectAll(highlitedItem) || !clickedItemIsSelectAll(highlitedItem) && clickedItemIsInSelectedItems(highlitedItem);
1557
+ if (shouldSkipTabSelection) return;
1558
+ handleListItemClicked({
1559
+ clickedItem: highlitedItem,
1560
+ onChange: setSelectedItems
1561
+ });
1568
1562
  }
1569
1563
  }
1570
1564
  }, getDropdownProps({
@@ -1667,13 +1661,13 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1667
1661
  },
1668
1662
  itemToString: itemToString
1669
1663
  }),
1670
- closeMenu = _useSelect.closeMenu,
1671
1664
  isOpen = _useSelect.isOpen,
1672
1665
  getItemProps = _useSelect.getItemProps,
1673
1666
  getLabelProps = _useSelect.getLabelProps,
1674
1667
  getMenuProps = _useSelect.getMenuProps,
1675
1668
  getToggleButtonProps = _useSelect.getToggleButtonProps,
1676
1669
  highlightedIndex = _useSelect.highlightedIndex,
1670
+ selectItem = _useSelect.selectItem,
1677
1671
  reset = _useSelect.reset;
1678
1672
  // calculations for floating-UI popover position
1679
1673
  var _useFloating = reactDom.useFloating({
@@ -1741,10 +1735,8 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
1741
1735
  var highlitedItem = normalizedItems[highlightedIndex];
1742
1736
  // we don't want to clear selection with tab
1743
1737
  if ((selectOnTab || selectOnBlur) && highlitedItem && highlitedItem !== selectedItem) {
1744
- onChange == null || onChange(highlitedItem);
1738
+ selectItem(highlitedItem);
1745
1739
  }
1746
- closeMenu();
1747
- e.preventDefault();
1748
1740
  }
1749
1741
  }
1750
1742
  }), {