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