@entur/dropdown 5.0.7 → 5.0.9-beta.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.
@@ -108,4 +108,4 @@ export type MultiSelectProps = {
108
108
  */
109
109
  ariaLabelSelectedItem?: string;
110
110
  };
111
- export declare const MultiSelect: ({ className, clearable, clearInputOnSelect, debounceTimeout, disabled, feedback, hideSelectAll, itemFilter, items: initialItems, label, labelAllItemsSelected, labelClearAllItems, labelSelectAll, listStyle, loadingText, maxChips, noMatchesText, onChange, placeholder, readOnly, selectedItems, selectOnBlur, style, variant, ariaLabelChosenSingular, ariaLabelChosenPlural, ariaLabelCloseList, ariaLabelJumpToInput, ariaLabelOpenList, ariaLabelRemoveSelected, ariaLabelSelectedItem, ...rest }: MultiSelectProps) => React.JSX.Element;
111
+ export declare const MultiSelect: ({ className, clearable, clearInputOnSelect, debounceTimeout, disabled, feedback, hideSelectAll, items: initialItems, itemFilter, label, labelAllItemsSelected, labelClearAllItems, labelSelectAll, listStyle, loadingText, maxChips, noMatchesText, onChange, placeholder, readOnly, selectedItems, selectOnBlur, style, variant, ariaLabelChosenSingular, ariaLabelChosenPlural, ariaLabelCloseList, ariaLabelJumpToInput, ariaLabelOpenList, ariaLabelRemoveSelected, ariaLabelSelectedItem, ...rest }: MultiSelectProps) => React.JSX.Element;
@@ -67,4 +67,4 @@ export type SearchableDropdownProps = {
67
67
  */
68
68
  ariaLabelOpenList?: string;
69
69
  };
70
- export declare const SearchableDropdown: ({ ariaLabelCloseList, ariaLabelOpenList, className, clearable, debounceTimeout, disabled, disableLabelAnimation, feedback, itemFilter, items: initialItems, label, labelClearSelectedItem, listStyle, loadingText, onChange, placeholder, prepend, readOnly, selectedItem: value, selectOnBlur, style, variant, ...rest }: SearchableDropdownProps) => React.JSX.Element;
70
+ export declare const SearchableDropdown: ({ ariaLabelCloseList, ariaLabelOpenList, className, clearable, debounceTimeout, disabled, disableLabelAnimation, feedback, items: initialItems, itemFilter, label, labelClearSelectedItem, listStyle, loadingText, onChange, placeholder, prepend, readOnly, selectedItem: value, selectOnBlur, style, variant, ...rest }: SearchableDropdownProps) => React.JSX.Element;
@@ -1411,7 +1411,7 @@ var FieldAppend$1 = function FieldAppend(_ref3) {
1411
1411
  selectedItems = _ref3.selectedItems;
1412
1412
  if (loading) {
1413
1413
  return React.createElement("div", {
1414
- className: 'eds-dropdown-appendix__toggle-button--loading-dots'
1414
+ className: 'eds-dropdown__appendix__toggle-button--loading-dots'
1415
1415
  }, React.createElement(loader.LoadingDots, {
1416
1416
  "aria-label": loadingText
1417
1417
  }));
@@ -1420,13 +1420,13 @@ var FieldAppend$1 = function FieldAppend(_ref3) {
1420
1420
  return null;
1421
1421
  }
1422
1422
  return React.createElement("div", {
1423
- className: "eds-dropdown-appendix"
1423
+ className: "eds-dropdown__appendix"
1424
1424
  }, clearable && (selectedItems == null ? void 0 : selectedItems.length) > 0 && selectedItems[0] !== null && React.createElement(React.Fragment, null, React.createElement(ClearableButton, {
1425
1425
  onClear: onClear,
1426
1426
  focusable: true,
1427
1427
  labelClearSelectedItems: labelClearSelectedItems
1428
1428
  }), React.createElement("div", {
1429
- className: "eds-dropdown-appendix__divider"
1429
+ className: "eds-dropdown__appendix__divider"
1430
1430
  })), React.createElement(ToggleButton, {
1431
1431
  "aria-hidden": ariaHiddenToggleButton,
1432
1432
  ariaLabelCloseList: ariaLabelCloseList,
@@ -1446,9 +1446,9 @@ var ClearableButton = function ClearableButton(_ref4) {
1446
1446
  "aria-hidden": "true",
1447
1447
  placement: "top",
1448
1448
  content: labelClearSelectedItems,
1449
- className: "eds-dropdown-appendix__clear-button__tooltip"
1449
+ className: "eds-dropdown__appendix__clear-button__tooltip"
1450
1450
  }, React.createElement(button.IconButton, {
1451
- className: "eds-dropdown-appendix__clear-button",
1451
+ className: "eds-dropdown__appendix__clear-button",
1452
1452
  type: "button",
1453
1453
  tabIndex: focusable ? 0 : 1,
1454
1454
  onClick: onClear,
@@ -1469,8 +1469,8 @@ var ToggleButton = function ToggleButton(_ref5) {
1469
1469
  _ref5$focusable = _ref5.focusable,
1470
1470
  focusable = _ref5$focusable === void 0 ? false : _ref5$focusable;
1471
1471
  return React.createElement(button.IconButton, _extends({}, getToggleButtonProps({
1472
- className: classNames('eds-dropdown-appendix__toggle-button', {
1473
- 'eds-dropdown-appendix__toggle-button--open': isOpen
1472
+ className: classNames('eds-dropdown__appendix__toggle-button', {
1473
+ 'eds-dropdown__appendix__toggle-button--open': isOpen
1474
1474
  }),
1475
1475
  'aria-labelledby': undefined
1476
1476
  }), {
@@ -1493,9 +1493,19 @@ function lowerCaseFilterTest(item, input) {
1493
1493
  var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
1494
1494
  return inputRegex.test(item.label);
1495
1495
  }
1496
+ function noFilter(
1497
+ //@ts-expect-error only here to comply with dropdown filter API
1498
+ item,
1499
+ //@ts-expect-error only here to comply with dropdown filter API
1500
+ input) {
1501
+ return true;
1502
+ }
1496
1503
  var itemToString = function itemToString(item) {
1497
1504
  return item ? item.label : '';
1498
1505
  };
1506
+ var isFunctionWithQueryArgument = function isFunctionWithQueryArgument(object) {
1507
+ return typeof object === 'function' && object.length > 0;
1508
+ };
1499
1509
  var useMultiselectUtils = function useMultiselectUtils(_ref) {
1500
1510
  var listItems = _ref.listItems,
1501
1511
  selectedItems = _ref.selectedItems,
@@ -1504,11 +1514,20 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1504
1514
  var listItemsWithoutSelectAll = listItems.filter(function (item) {
1505
1515
  return item.value !== selectAll.value;
1506
1516
  });
1507
- var allListItemsAreSelected = listItemsWithoutSelectAll.filter(function (item) {
1508
- return !selectedItems.includes(item);
1509
- }).length === 0;
1510
- var someListItemsAreSelected = listItemsWithoutSelectAll.some(function (item) {
1511
- return selectedItems.includes(item);
1517
+ var unselectedItemsInListItems = listItemsWithoutSelectAll.filter(function (listItem) {
1518
+ return !selectedItems.some(function (selectedItem) {
1519
+ return selectedItem.value === listItem.value;
1520
+ });
1521
+ });
1522
+ var allListItemsAreSelected = !listItemsWithoutSelectAll.some(function (listItem) {
1523
+ return !selectedItems.some(function (selectedItem) {
1524
+ return selectedItem.value === listItem.value;
1525
+ });
1526
+ });
1527
+ var someListItemsAreSelected = listItemsWithoutSelectAll.some(function (listItem) {
1528
+ return selectedItems.some(function (selectedItem) {
1529
+ return selectedItem.value === listItem.value;
1530
+ });
1512
1531
  });
1513
1532
  var addClickedItemToSelectedItems = function addClickedItemToSelectedItems(clickedItem, onChange) {
1514
1533
  return onChange([].concat(selectedItems, [clickedItem]));
@@ -1549,14 +1568,15 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1549
1568
  return false;
1550
1569
  };
1551
1570
  var selectAllUnselectedItemsInListItems = function selectAllUnselectedItemsInListItems(onChange) {
1552
- onChange([].concat(selectedItems, listItemsWithoutSelectAll.filter(function (item) {
1553
- return !selectedItems.includes(item);
1554
- })));
1571
+ onChange([].concat(selectedItems, unselectedItemsInListItems));
1555
1572
  };
1556
1573
  var unselectAllListItems = function unselectAllListItems(onChange) {
1557
- onChange(selectedItems.filter(function (item) {
1558
- return !listItemsWithoutSelectAll.includes(item);
1559
- }));
1574
+ var selectedItemsWithoutItemsInListItems = selectedItems.filter(function (selectedItem) {
1575
+ return !listItemsWithoutSelectAll.some(function (listItem) {
1576
+ return listItem.value === selectedItem.value;
1577
+ });
1578
+ });
1579
+ onChange(selectedItemsWithoutItemsInListItems);
1560
1580
  };
1561
1581
  return {
1562
1582
  addClickedItemToSelectedItems: addClickedItemToSelectedItems,
@@ -1622,7 +1642,7 @@ var isVoiceOverClick = function isVoiceOverClick(clickEvent) {
1622
1642
  };
1623
1643
  /* end a11y utils */
1624
1644
 
1625
- var _excluded$3 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "itemFilter", "items", "label", "labelClearSelectedItem", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
1645
+ var _excluded$3 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "items", "itemFilter", "label", "labelClearSelectedItem", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
1626
1646
  var SearchableDropdown = function SearchableDropdown(_ref) {
1627
1647
  var _selectedItem$label;
1628
1648
  var ariaLabelCloseList = _ref.ariaLabelCloseList,
@@ -1636,9 +1656,9 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1636
1656
  _ref$disableLabelAnim = _ref.disableLabelAnimation,
1637
1657
  disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
1638
1658
  feedback = _ref.feedback,
1639
- _ref$itemFilter = _ref.itemFilter,
1640
- itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1641
1659
  initialItems = _ref.items,
1660
+ _ref$itemFilter = _ref.itemFilter,
1661
+ itemFilter = _ref$itemFilter === void 0 ? isFunctionWithQueryArgument(initialItems) ? noFilter : lowerCaseFilterTest : _ref$itemFilter,
1642
1662
  label = _ref.label,
1643
1663
  _ref$labelClearSelect = _ref.labelClearSelectedItem,
1644
1664
  labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
@@ -1678,7 +1698,8 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1678
1698
  };
1679
1699
  var updateListItems = function updateListItems(_ref3) {
1680
1700
  var inputValue = _ref3.inputValue;
1681
- if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : EMPTY_INPUT); // fetch items only if user provides a function as items
1701
+ var shouldRefetchItems = isFunctionWithQueryArgument(initialItems);
1702
+ if (shouldRefetchItems) fetchItems(inputValue != null ? inputValue : EMPTY_INPUT);
1682
1703
  filterListItems({
1683
1704
  inputValue: inputValue != null ? inputValue : EMPTY_INPUT
1684
1705
  });
@@ -1701,7 +1722,7 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1701
1722
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
1702
1723
  case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1703
1724
  {
1704
- filterListItems({
1725
+ updateListItems({
1705
1726
  inputValue: EMPTY_INPUT
1706
1727
  });
1707
1728
  return _extends({}, changes, {
@@ -1808,16 +1829,14 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1808
1829
  prepend: prepend,
1809
1830
  readOnly: readOnly,
1810
1831
  variant: variant
1811
- }, rest), !hideSelectedItem && selectedItem && !inputValue && React.createElement("span", {
1812
- className: "eds-dropdown__selected-item__wrapper",
1813
- "aria-hidden": "true"
1814
- }, React.createElement("span", {
1815
- className: "eds-dropdown__selected-item",
1832
+ }, rest), !hideSelectedItem && selectedItem !== null && inputValue === '' && React.createElement("span", {
1833
+ className: "eds-dropdown--searchable__selected-item",
1834
+ "aria-hidden": "true",
1816
1835
  onClick: function onClick() {
1817
1836
  var _inputRef$current2;
1818
1837
  return (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.focus();
1819
1838
  }
1820
- }, selectedItem.label)), React.createElement("input", _extends({
1839
+ }, selectedItem.label), React.createElement("input", _extends({
1821
1840
  className: "eds-dropdown__input eds-form-control",
1822
1841
  disabled: readOnly || disabled,
1823
1842
  placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder
@@ -1845,7 +1864,7 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1845
1864
  }));
1846
1865
  };
1847
1866
 
1848
- var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "feedback", "hideSelectAll", "itemFilter", "items", "label", "labelAllItemsSelected", "labelClearAllItems", "labelSelectAll", "listStyle", "loadingText", "maxChips", "noMatchesText", "onChange", "placeholder", "readOnly", "selectedItems", "selectOnBlur", "style", "variant", "ariaLabelChosenSingular", "ariaLabelChosenPlural", "ariaLabelCloseList", "ariaLabelJumpToInput", "ariaLabelOpenList", "ariaLabelRemoveSelected", "ariaLabelSelectedItem"];
1867
+ var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "feedback", "hideSelectAll", "items", "itemFilter", "label", "labelAllItemsSelected", "labelClearAllItems", "labelSelectAll", "listStyle", "loadingText", "maxChips", "noMatchesText", "onChange", "placeholder", "readOnly", "selectedItems", "selectOnBlur", "style", "variant", "ariaLabelChosenSingular", "ariaLabelChosenPlural", "ariaLabelCloseList", "ariaLabelJumpToInput", "ariaLabelOpenList", "ariaLabelRemoveSelected", "ariaLabelSelectedItem"];
1849
1868
  var MultiSelect = function MultiSelect(_ref) {
1850
1869
  var className = _ref.className,
1851
1870
  _ref$clearable = _ref.clearable,
@@ -1858,9 +1877,9 @@ var MultiSelect = function MultiSelect(_ref) {
1858
1877
  feedback = _ref.feedback,
1859
1878
  _ref$hideSelectAll = _ref.hideSelectAll,
1860
1879
  hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
1861
- _ref$itemFilter = _ref.itemFilter,
1862
- itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1863
1880
  initialItems = _ref.items,
1881
+ _ref$itemFilter = _ref.itemFilter,
1882
+ itemFilter = _ref$itemFilter === void 0 ? isFunctionWithQueryArgument(initialItems) ? noFilter : lowerCaseFilterTest : _ref$itemFilter,
1864
1883
  label = _ref.label,
1865
1884
  _ref$labelAllItemsSel = _ref.labelAllItemsSelected,
1866
1885
  labelAllItemsSelected = _ref$labelAllItemsSel === void 0 ? 'Alle valgt' : _ref$labelAllItemsSel,
@@ -1879,7 +1898,8 @@ var MultiSelect = function MultiSelect(_ref) {
1879
1898
  placeholder = _ref.placeholder,
1880
1899
  _ref$readOnly = _ref.readOnly,
1881
1900
  readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1882
- selectedItems = _ref.selectedItems,
1901
+ _ref$selectedItems = _ref.selectedItems,
1902
+ selectedItems = _ref$selectedItems === void 0 ? [] : _ref$selectedItems,
1883
1903
  _ref$selectOnBlur = _ref.selectOnBlur,
1884
1904
  selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1885
1905
  style = _ref.style,
@@ -1905,6 +1925,10 @@ var MultiSelect = function MultiSelect(_ref) {
1905
1925
  lastRemovedItem = _React$useState2[0],
1906
1926
  setLastRemovedItem = _React$useState2[1];
1907
1927
  var inputRef = React.useRef(null);
1928
+ React.useEffect(function () {
1929
+ //@ts-expect-error this is done to aid developers debug wrong prop usage
1930
+ if (rest.selectedItem !== undefined) console.warn("Incorrect 'selectedItem' prop found, did you mean to use 'selectedItems?");
1931
+ }, []);
1908
1932
  var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1909
1933
  normalizedItems = _useResolvedItems.items,
1910
1934
  loading = _useResolvedItems.loading,
@@ -1934,7 +1958,8 @@ var MultiSelect = function MultiSelect(_ref) {
1934
1958
  };
1935
1959
  var updateListItems = function updateListItems(_ref3) {
1936
1960
  var inputValue = _ref3.inputValue;
1937
- if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : EMPTY_INPUT); // fetch items only if user provides a function as items
1961
+ var shouldRefetchItems = isFunctionWithQueryArgument(initialItems);
1962
+ if (shouldRefetchItems) fetchItems(inputValue != null ? inputValue : EMPTY_INPUT);
1938
1963
  filterListItems({
1939
1964
  inputValue: inputValue != null ? inputValue : EMPTY_INPUT
1940
1965
  });
@@ -2037,6 +2062,9 @@ var MultiSelect = function MultiSelect(_ref) {
2037
2062
  // reset input value when leaving input field
2038
2063
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
2039
2064
  {
2065
+ updateListItems({
2066
+ inputValue: EMPTY_INPUT
2067
+ });
2040
2068
  return _extends({}, changes, {
2041
2069
  inputValue: EMPTY_INPUT
2042
2070
  });
@@ -2129,16 +2157,16 @@ var MultiSelect = function MultiSelect(_ref) {
2129
2157
  label: label,
2130
2158
  labelId: getLabelProps().id,
2131
2159
  labelProps: getLabelProps(),
2132
- readOnly: readOnly,
2133
- variant: variant
2134
- }, rest), React.createElement("div", {
2135
- className: classNames('eds-dropdown__selected-items-and-input', {
2136
- 'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
2137
- }),
2138
2160
  onClick: function onClick(e) {
2139
2161
  var _inputRef$current4;
2140
2162
  if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
2141
- }
2163
+ },
2164
+ readOnly: readOnly,
2165
+ variant: variant
2166
+ }, rest), React.createElement("div", {
2167
+ className: classNames('eds-dropdown--multiselect__selected-items-and-input', {
2168
+ 'eds-dropdown--multiselect__selected-items-and-input--filled': hasSelectedItems
2169
+ })
2142
2170
  }, selectedItems.length < maxChips ? React.createElement(React.Fragment, null, selectedItems.length > 1 ? React.createElement(a11y.VisuallyHidden, {
2143
2171
  onClick: function onClick() {
2144
2172
  var _inputRef$current5;
@@ -2295,12 +2323,12 @@ var Dropdown = function Dropdown(_ref) {
2295
2323
  readOnly: readOnly,
2296
2324
  variant: variant
2297
2325
  }, rest), React.createElement("div", _extends({
2298
- className: "eds-dropdown__selected-item-button"
2326
+ className: "eds-dropdown__selected-item"
2299
2327
  }, getToggleButtonProps({
2300
2328
  id: undefined
2301
2329
  })), (_ref3 = (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : React.createElement("span", {
2302
- className: classNames('eds-dropdown__selected-item-button__placeholder', {
2303
- 'eds-dropdown__selected-item-button__placeholder--readonly': readOnly
2330
+ className: classNames('eds-dropdown__selected-item__placeholder', {
2331
+ 'eds-dropdown__selected-item__placeholder--readonly': readOnly
2304
2332
  })
2305
2333
  }, placeholder)) != null ? _ref3 : '')), React.createElement(DropdownList, {
2306
2334
  getItemProps: getItemProps,