@entur/dropdown 6.0.1 → 6.0.3-RC.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.
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
- import { UseComboboxGetMenuPropsOptions, GetPropsCommonOptions, UseComboboxGetItemPropsOptions } from 'downshift';
2
+ import { UseComboboxPropGetters, UseSelectPropGetters } from 'downshift';
3
3
  import { NormalizedDropdownItemType } from '../types';
4
4
  import './DropdownList.scss';
5
5
  type DropdownListProps<ValueType> = {
6
6
  ariaLabelChosenSingular?: string;
7
7
  ariaLabelSelectedItem?: string;
8
- getItemProps: (options: UseComboboxGetItemPropsOptions<NormalizedDropdownItemType<ValueType>>) => any;
9
- getMenuProps: (options?: UseComboboxGetMenuPropsOptions | undefined, otherOptions?: GetPropsCommonOptions | undefined) => any;
8
+ getMenuProps: UseComboboxPropGetters<ValueType>['getMenuProps'] | UseSelectPropGetters<ValueType>['getMenuProps'];
9
+ getItemProps: UseComboboxPropGetters<ValueType>['getItemProps'] | UseSelectPropGetters<ValueType>['getItemProps'];
10
10
  highlightedIndex: number;
11
11
  isOpen: boolean;
12
12
  listItems: NormalizedDropdownItemType<ValueType | string>[];
@@ -1335,9 +1335,11 @@ var DropdownList = function DropdownList(_ref) {
1335
1335
  return (
1336
1336
  // use popover from @entur/tooltip when that package upgrades to floating-ui
1337
1337
  React.createElement("ul", _extends({}, getMenuProps({
1338
- 'aria-multiselectable': isMultiselect,
1339
- ref: utils.mergeRefs(getMenuProps().ref, listRef)
1338
+ 'aria-multiselectable': isMultiselect
1339
+ }, {
1340
+ suppressRefError: true
1340
1341
  }), {
1342
+ ref: utils.mergeRefs(listRef, getMenuProps().ref),
1341
1343
  className: "eds-dropdown__list",
1342
1344
  style: _extends({
1343
1345
  display: isOpen ? 'inline-block' : 'none'
@@ -1346,14 +1348,13 @@ var DropdownList = function DropdownList(_ref) {
1346
1348
  var itemIsSelectAll = item.value === (selectAllItem == null ? void 0 : selectAllItem.value);
1347
1349
  if (itemIsSelectAll && listItems.length <= 2) return null;
1348
1350
  return React.createElement("li", _extends({
1349
- key: (item == null ? void 0 : item.label) + (item == null ? void 0 : item.value),
1350
1351
  className: classNames('eds-dropdown__list__item', {
1351
1352
  'eds-dropdown__list__item--select-all': itemIsSelectAll,
1352
1353
  'eds-dropdown__list__item--highlighted': highlightedIndex === index,
1353
1354
  'eds-dropdown__list__item--selected': !isMultiselect && isItemSelected(item)
1354
- })
1355
+ }),
1356
+ key: (item == null ? void 0 : item.label) + (item == null ? void 0 : item.value)
1355
1357
  }, getItemProps({
1356
- key: (item == null ? void 0 : item.label) + (item == null ? void 0 : item.value),
1357
1358
  // @ts-expect-error Since getItemProps expects the same item type
1358
1359
  // here as items, it throws error when selectAllItem is a string.
1359
1360
  // This does, however, not cause any functional issues.
@@ -1403,7 +1404,8 @@ var SelectedItemTag = function SelectedItemTag(_ref) {
1403
1404
  key: selectedItem.value,
1404
1405
  "aria-live": "polite"
1405
1406
  }), React.createElement("span", {
1406
- "aria-hidden": "true"
1407
+ "aria-hidden": "true",
1408
+ className: "eds-dropdown__selected-item-tag__text"
1407
1409
  }, selectedItem.label));
1408
1410
  };
1409
1411
  var FieldAppend$1 = function FieldAppend(_ref3) {
@@ -1517,6 +1519,9 @@ input) {
1517
1519
  var itemToString = function itemToString(item) {
1518
1520
  return item ? item.label : '';
1519
1521
  };
1522
+ var itemToKey = function itemToKey(item) {
1523
+ return (item == null ? void 0 : item.label) + (item == null ? void 0 : item.value);
1524
+ };
1520
1525
  var isFunctionWithQueryArgument = function isFunctionWithQueryArgument(object) {
1521
1526
  return typeof object === 'function' && object.length > 0;
1522
1527
  };
@@ -1556,17 +1561,14 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1556
1561
  };
1557
1562
  var handleListItemClicked = function handleListItemClicked(_ref2) {
1558
1563
  var clickedItem = _ref2.clickedItem,
1559
- onChange = _ref2.onChange,
1560
- setLastRemovedItem = _ref2.setLastRemovedItem;
1564
+ onChange = _ref2.onChange;
1561
1565
  if (clickedItemIsSelectAll(clickedItem)) {
1562
1566
  if (allListItemsAreSelected) {
1563
- setLastRemovedItem(selectAll);
1564
1567
  return unselectAllListItems(onChange);
1565
1568
  }
1566
1569
  return selectAllUnselectedItemsInListItems(onChange);
1567
1570
  }
1568
1571
  if (clickedItemIsInSelectedItems(clickedItem)) {
1569
- setLastRemovedItem(clickedItem);
1570
1572
  return removeClickedItemFromSelectedItems(clickedItem, onChange);
1571
1573
  }
1572
1574
  addClickedItemToSelectedItems(clickedItem, onChange);
@@ -1607,40 +1609,23 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1607
1609
  unselectAllListItems: unselectAllListItems
1608
1610
  };
1609
1611
  };
1612
+ /* end multiselect utils */
1613
+ /* start a11y utils */
1614
+ // called when the state changes:
1615
+ // selectedItem, highlightedIndex, inputValue or isOpen.
1610
1616
  function getA11yStatusMessage(options) {
1611
1617
  var isOpen = options.isOpen,
1612
- resultCount = options.resultCount,
1613
- previousResultCount = options.previousResultCount,
1614
1618
  _options$selectAllIte = options.selectAllItemIncluded,
1615
1619
  selectAllItemIncluded = _options$selectAllIte === void 0 ? false : _options$selectAllIte,
1616
- _options$ariaLabelNoR = options.ariaLabelNoResults,
1617
- ariaLabelNoResults = _options$ariaLabelNoR === void 0 ? 'Ingen resultater' : _options$ariaLabelNoR;
1620
+ resultCount = options.resultCount;
1618
1621
  if (!isOpen) {
1619
1622
  return '';
1620
1623
  }
1621
1624
  var resultCountWithoutSelectAll = selectAllItemIncluded ? resultCount - 1 : resultCount;
1622
1625
  if (resultCountWithoutSelectAll === 0) {
1623
- return ariaLabelNoResults;
1626
+ return 'Ingen resultater';
1624
1627
  }
1625
- if (resultCount !== previousResultCount) {
1626
- return resultCountWithoutSelectAll + " resultat" + (resultCountWithoutSelectAll === 1 ? '' : 'er') + " tilgjengelig, naviger med pil opp eller ned, velg elementer med enter.";
1627
- }
1628
- return '';
1629
- }
1630
- function getA11ySelectionMessage(options) {
1631
- var selectedItem = options.selectedItem,
1632
- itemToStringLocal = options.itemToString,
1633
- selectAllItem = options.selectAllItem;
1634
- if ((selectedItem == null ? void 0 : selectedItem.value) === (selectAllItem == null ? void 0 : selectAllItem.value)) return 'Alle elementer i listen valgt.';
1635
- return selectedItem ? itemToStringLocal(selectedItem) + " er valgt." : '';
1636
- }
1637
- function getA11yRemovalMessage(options) {
1638
- var itemToString = options.itemToString,
1639
- selectAllItem = options.selectAllItem,
1640
- removedItem = options.removedItem;
1641
- if (removedItem === undefined) return '';
1642
- if (removedItem.value === (selectAllItem == null ? void 0 : selectAllItem.value)) return 'Alle elementer i listen fjernet fra valgte.';
1643
- return itemToString(removedItem) + " fjernet fra valgte.";
1628
+ return resultCountWithoutSelectAll + " resultat" + (resultCountWithoutSelectAll === 1 ? '' : 'er') + " tilgjengelig, naviger med pil opp eller ned, velg elementer med Enter.";
1644
1629
  }
1645
1630
  /* end a11y utils */
1646
1631
 
@@ -1805,11 +1790,10 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1805
1790
  }
1806
1791
  },
1807
1792
  // Accessibility
1808
- getA11yStatusMessage: getA11yStatusMessage,
1809
- // The following A11y-helper does not work due to a bug (https://github.com/downshift-js/downshift/issues/1227)
1810
- // but is left here for when it is fixed
1811
- getA11ySelectionMessage: function getA11ySelectionMessage$1(options) {
1812
- return getA11ySelectionMessage(options);
1793
+ getA11yStatusMessage: function getA11yStatusMessage$1(options) {
1794
+ return getA11yStatusMessage(_extends({}, options, {
1795
+ resultCount: listItems.length
1796
+ }));
1813
1797
  }
1814
1798
  }, rest)),
1815
1799
  isOpen = _useCombobox.isOpen,
@@ -1909,6 +1893,9 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1909
1893
  }))), React.createElement(DropdownList, {
1910
1894
  ariaLabelChosenSingular: ariaLabelChosenSingular,
1911
1895
  ariaLabelSelectedItem: ariaLabelSelectedItem,
1896
+ getItemProps: getItemProps,
1897
+ getMenuProps: getMenuProps,
1898
+ highlightedIndex: highlightedIndex,
1912
1899
  isOpen: isOpen,
1913
1900
  listItems: listItems,
1914
1901
  listStyle: _extends({}, floatingStyles, listStyle),
@@ -1916,9 +1903,6 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
1916
1903
  loading: loading,
1917
1904
  loadingText: loadingText,
1918
1905
  noMatchesText: noMatchesText,
1919
- getItemProps: getItemProps,
1920
- getMenuProps: getMenuProps,
1921
- highlightedIndex: highlightedIndex,
1922
1906
  selectedItems: selectedItem !== null ? [selectedItem] : []
1923
1907
  }));
1924
1908
  };
@@ -1982,14 +1966,12 @@ var MultiSelect = function MultiSelect(_ref) {
1982
1966
  var _React$useState = React.useState(0),
1983
1967
  lastHighlightedIndex = _React$useState[0],
1984
1968
  setLastHighlightedIndex = _React$useState[1];
1985
- var _React$useState2 = React.useState(undefined),
1986
- lastRemovedItem = _React$useState2[0],
1987
- setLastRemovedItem = _React$useState2[1];
1988
1969
  var inputRef = React.useRef(null);
1989
1970
  React.useEffect(function () {
1990
1971
  //@ts-expect-error this is done to aid developers debug wrong prop usage
1991
1972
  if (rest.selectedItem !== undefined) console.warn("Incorrect 'selectedItem' prop found, did you mean to use 'selectedItems?");
1992
- }, []);
1973
+ //@ts-expect-error selectedItem should not actually exist in rest
1974
+ }, [rest.selectedItem]);
1993
1975
  var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1994
1976
  normalizedItems = _useResolvedItems.items,
1995
1977
  loading = _useResolvedItems.loading,
@@ -2040,7 +2022,9 @@ var MultiSelect = function MultiSelect(_ref) {
2040
2022
  selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState;
2041
2023
  var _useMultipleSelection = Downshift.useMultipleSelection({
2042
2024
  selectedItems: selectedItems,
2025
+ // @ts-expect-error prop missing from library types
2043
2026
  itemToString: itemToString,
2027
+ itemToKey: itemToKey,
2044
2028
  onStateChange: function onStateChange(_ref4) {
2045
2029
  var newSelectedItems = _ref4.selectedItems,
2046
2030
  type = _ref4.type;
@@ -2054,13 +2038,6 @@ var MultiSelect = function MultiSelect(_ref) {
2054
2038
  break;
2055
2039
  }
2056
2040
  }
2057
- },
2058
- // Accessibility
2059
- getA11yRemovalMessage: function getA11yRemovalMessage$1(options) {
2060
- return getA11yRemovalMessage(_extends({}, options, {
2061
- selectAllItem: selectAll,
2062
- removedItem: lastRemovedItem
2063
- }));
2064
2041
  }
2065
2042
  }),
2066
2043
  getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
@@ -2108,8 +2085,7 @@ var MultiSelect = function MultiSelect(_ref) {
2108
2085
  if (isOpen && changes.highlightedIndex !== undefined) {
2109
2086
  handleListItemClicked({
2110
2087
  clickedItem: listItems[changes.highlightedIndex],
2111
- onChange: onChange,
2112
- setLastRemovedItem: setLastRemovedItem
2088
+ onChange: onChange
2113
2089
  });
2114
2090
  }
2115
2091
  }
@@ -2159,8 +2135,7 @@ var MultiSelect = function MultiSelect(_ref) {
2159
2135
  {
2160
2136
  handleListItemClicked({
2161
2137
  clickedItem: clickedItem,
2162
- onChange: onChange,
2163
- setLastRemovedItem: setLastRemovedItem
2138
+ onChange: onChange
2164
2139
  });
2165
2140
  }
2166
2141
  }
@@ -2168,14 +2143,8 @@ var MultiSelect = function MultiSelect(_ref) {
2168
2143
  // Accessibility
2169
2144
  getA11yStatusMessage: function getA11yStatusMessage$1(options) {
2170
2145
  return getA11yStatusMessage(_extends({}, options, {
2171
- selectAllItemIncluded: !hideSelectAll
2172
- }));
2173
- },
2174
- // The following A11y-helper does not work due to a bug (https://github.com/downshift-js/downshift/issues/1227)
2175
- // but is left here for when it is fixed
2176
- getA11ySelectionMessage: function getA11ySelectionMessage$1(options) {
2177
- return getA11ySelectionMessage(_extends({}, options, {
2178
- selectAllItem: selectAll
2146
+ selectAllItemIncluded: !hideSelectAll,
2147
+ resultCount: listItems.length
2179
2148
  }));
2180
2149
  }
2181
2150
  }, rest)),
@@ -2266,8 +2235,7 @@ var MultiSelect = function MultiSelect(_ref) {
2266
2235
  var _inputRef$current6;
2267
2236
  handleListItemClicked({
2268
2237
  clickedItem: selectedItem,
2269
- onChange: onChange,
2270
- setLastRemovedItem: setLastRemovedItem
2238
+ onChange: onChange
2271
2239
  });
2272
2240
  inputRef == null ? void 0 : (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.focus();
2273
2241
  },
@@ -2292,17 +2260,16 @@ var MultiSelect = function MultiSelect(_ref) {
2292
2260
  if (highlitedItem) {
2293
2261
  handleListItemClicked({
2294
2262
  clickedItem: highlitedItem,
2295
- onChange: onChange,
2296
- setLastRemovedItem: setLastRemovedItem
2263
+ onChange: onChange
2297
2264
  });
2298
2265
  }
2299
2266
  }
2300
2267
  }
2301
2268
  }, getDropdownProps({
2302
2269
  preventKeyAction: isOpen,
2303
- ref: inputRef,
2304
- value: inputValue != null ? inputValue : EMPTY_INPUT
2305
- })))))), React.createElement(DropdownList, {
2270
+ value: inputValue != null ? inputValue : EMPTY_INPUT,
2271
+ ref: inputRef
2272
+ }))))), "; ;"), React.createElement(DropdownList, {
2306
2273
  ariaLabelChosenSingular: ariaLabelChosenSingular,
2307
2274
  ariaLabelSelectedItem: ariaLabelSelectedItem,
2308
2275
  getItemProps: getItemProps,
@@ -2385,6 +2352,7 @@ var Dropdown = function Dropdown(_ref) {
2385
2352
  itemToString: itemToString
2386
2353
  }),
2387
2354
  isOpen = _useSelect.isOpen,
2355
+ openMenu = _useSelect.openMenu,
2388
2356
  getItemProps = _useSelect.getItemProps,
2389
2357
  getLabelProps = _useSelect.getLabelProps,
2390
2358
  getMenuProps = _useSelect.getMenuProps,
@@ -2431,6 +2399,9 @@ var Dropdown = function Dropdown(_ref) {
2431
2399
  labelId: getLabelProps().id,
2432
2400
  labelProps: getLabelProps(),
2433
2401
  labelTooltip: labelTooltip,
2402
+ onClick: function onClick(e) {
2403
+ if (e.target === e.currentTarget) openMenu();
2404
+ },
2434
2405
  prepend: prepend,
2435
2406
  readOnly: readOnly,
2436
2407
  ref: refs.setReference,