@entur/dropdown 5.0.8 → 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;
@@ -839,7 +839,7 @@ debounceTimeout) {
839
839
  return isItemsFunction ? itemsOrItemsResolver : function () {
840
840
  return Promise.resolve(itemsOrItemsResolver);
841
841
  };
842
- }, [isItemsFunction]);
842
+ }, [itemsOrItemsResolver, isItemsFunction]);
843
843
  var _React$useReducer = React.useReducer(reducer, {
844
844
  items: isItemsFunction ? [] : itemsOrItemsResolver,
845
845
  loading: false
@@ -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,
@@ -1632,7 +1642,7 @@ var isVoiceOverClick = function isVoiceOverClick(clickEvent) {
1632
1642
  };
1633
1643
  /* end a11y utils */
1634
1644
 
1635
- 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"];
1636
1646
  var SearchableDropdown = function SearchableDropdown(_ref) {
1637
1647
  var _selectedItem$label;
1638
1648
  var ariaLabelCloseList = _ref.ariaLabelCloseList,
@@ -1646,9 +1656,9 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1646
1656
  _ref$disableLabelAnim = _ref.disableLabelAnimation,
1647
1657
  disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
1648
1658
  feedback = _ref.feedback,
1649
- _ref$itemFilter = _ref.itemFilter,
1650
- itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1651
1659
  initialItems = _ref.items,
1660
+ _ref$itemFilter = _ref.itemFilter,
1661
+ itemFilter = _ref$itemFilter === void 0 ? isFunctionWithQueryArgument(initialItems) ? noFilter : lowerCaseFilterTest : _ref$itemFilter,
1652
1662
  label = _ref.label,
1653
1663
  _ref$labelClearSelect = _ref.labelClearSelectedItem,
1654
1664
  labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
@@ -1688,7 +1698,8 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1688
1698
  };
1689
1699
  var updateListItems = function updateListItems(_ref3) {
1690
1700
  var inputValue = _ref3.inputValue;
1691
- 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);
1692
1703
  filterListItems({
1693
1704
  inputValue: inputValue != null ? inputValue : EMPTY_INPUT
1694
1705
  });
@@ -1711,7 +1722,7 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1711
1722
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
1712
1723
  case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1713
1724
  {
1714
- filterListItems({
1725
+ updateListItems({
1715
1726
  inputValue: EMPTY_INPUT
1716
1727
  });
1717
1728
  return _extends({}, changes, {
@@ -1818,16 +1829,14 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1818
1829
  prepend: prepend,
1819
1830
  readOnly: readOnly,
1820
1831
  variant: variant
1821
- }, rest), !hideSelectedItem && selectedItem && !inputValue && React.createElement("span", {
1822
- className: "eds-dropdown__selected-item__wrapper",
1823
- "aria-hidden": "true"
1824
- }, React.createElement("span", {
1825
- 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",
1826
1835
  onClick: function onClick() {
1827
1836
  var _inputRef$current2;
1828
1837
  return (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.focus();
1829
1838
  }
1830
- }, selectedItem.label)), React.createElement("input", _extends({
1839
+ }, selectedItem.label), React.createElement("input", _extends({
1831
1840
  className: "eds-dropdown__input eds-form-control",
1832
1841
  disabled: readOnly || disabled,
1833
1842
  placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder
@@ -1855,7 +1864,7 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1855
1864
  }));
1856
1865
  };
1857
1866
 
1858
- 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"];
1859
1868
  var MultiSelect = function MultiSelect(_ref) {
1860
1869
  var className = _ref.className,
1861
1870
  _ref$clearable = _ref.clearable,
@@ -1868,9 +1877,9 @@ var MultiSelect = function MultiSelect(_ref) {
1868
1877
  feedback = _ref.feedback,
1869
1878
  _ref$hideSelectAll = _ref.hideSelectAll,
1870
1879
  hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
1871
- _ref$itemFilter = _ref.itemFilter,
1872
- itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1873
1880
  initialItems = _ref.items,
1881
+ _ref$itemFilter = _ref.itemFilter,
1882
+ itemFilter = _ref$itemFilter === void 0 ? isFunctionWithQueryArgument(initialItems) ? noFilter : lowerCaseFilterTest : _ref$itemFilter,
1874
1883
  label = _ref.label,
1875
1884
  _ref$labelAllItemsSel = _ref.labelAllItemsSelected,
1876
1885
  labelAllItemsSelected = _ref$labelAllItemsSel === void 0 ? 'Alle valgt' : _ref$labelAllItemsSel,
@@ -1889,7 +1898,8 @@ var MultiSelect = function MultiSelect(_ref) {
1889
1898
  placeholder = _ref.placeholder,
1890
1899
  _ref$readOnly = _ref.readOnly,
1891
1900
  readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1892
- selectedItems = _ref.selectedItems,
1901
+ _ref$selectedItems = _ref.selectedItems,
1902
+ selectedItems = _ref$selectedItems === void 0 ? [] : _ref$selectedItems,
1893
1903
  _ref$selectOnBlur = _ref.selectOnBlur,
1894
1904
  selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1895
1905
  style = _ref.style,
@@ -1915,6 +1925,10 @@ var MultiSelect = function MultiSelect(_ref) {
1915
1925
  lastRemovedItem = _React$useState2[0],
1916
1926
  setLastRemovedItem = _React$useState2[1];
1917
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
+ }, []);
1918
1932
  var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1919
1933
  normalizedItems = _useResolvedItems.items,
1920
1934
  loading = _useResolvedItems.loading,
@@ -1944,9 +1958,7 @@ var MultiSelect = function MultiSelect(_ref) {
1944
1958
  };
1945
1959
  var updateListItems = function updateListItems(_ref3) {
1946
1960
  var inputValue = _ref3.inputValue;
1947
- var shouldRefetchItems =
1948
- // fetch items only if user provides a function with inputValue argument as items
1949
- typeof initialItems === 'function' && initialItems.length > 0; // Function.length == number of arguments
1961
+ var shouldRefetchItems = isFunctionWithQueryArgument(initialItems);
1950
1962
  if (shouldRefetchItems) fetchItems(inputValue != null ? inputValue : EMPTY_INPUT);
1951
1963
  filterListItems({
1952
1964
  inputValue: inputValue != null ? inputValue : EMPTY_INPUT
@@ -2050,6 +2062,9 @@ var MultiSelect = function MultiSelect(_ref) {
2050
2062
  // reset input value when leaving input field
2051
2063
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
2052
2064
  {
2065
+ updateListItems({
2066
+ inputValue: EMPTY_INPUT
2067
+ });
2053
2068
  return _extends({}, changes, {
2054
2069
  inputValue: EMPTY_INPUT
2055
2070
  });
@@ -2142,16 +2157,16 @@ var MultiSelect = function MultiSelect(_ref) {
2142
2157
  label: label,
2143
2158
  labelId: getLabelProps().id,
2144
2159
  labelProps: getLabelProps(),
2145
- readOnly: readOnly,
2146
- variant: variant
2147
- }, rest), React.createElement("div", {
2148
- className: classNames('eds-dropdown__selected-items-and-input', {
2149
- 'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
2150
- }),
2151
2160
  onClick: function onClick(e) {
2152
2161
  var _inputRef$current4;
2153
2162
  if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
2154
- }
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
+ })
2155
2170
  }, selectedItems.length < maxChips ? React.createElement(React.Fragment, null, selectedItems.length > 1 ? React.createElement(a11y.VisuallyHidden, {
2156
2171
  onClick: function onClick() {
2157
2172
  var _inputRef$current5;
@@ -2308,12 +2323,12 @@ var Dropdown = function Dropdown(_ref) {
2308
2323
  readOnly: readOnly,
2309
2324
  variant: variant
2310
2325
  }, rest), React.createElement("div", _extends({
2311
- className: "eds-dropdown__selected-item-button"
2326
+ className: "eds-dropdown__selected-item"
2312
2327
  }, getToggleButtonProps({
2313
2328
  id: undefined
2314
2329
  })), (_ref3 = (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : React.createElement("span", {
2315
- className: classNames('eds-dropdown__selected-item-button__placeholder', {
2316
- 'eds-dropdown__selected-item-button__placeholder--readonly': readOnly
2330
+ className: classNames('eds-dropdown__selected-item__placeholder', {
2331
+ 'eds-dropdown__selected-item__placeholder--readonly': readOnly
2317
2332
  })
2318
2333
  }, placeholder)) != null ? _ref3 : '')), React.createElement(DropdownList, {
2319
2334
  getItemProps: getItemProps,