@entur/dropdown 5.0.0-beta.1 → 5.0.0-beta.2

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.
@@ -41,6 +41,14 @@ export type MultiSelectBetaProps = {
41
41
  * @default "Velg alle"
42
42
  */
43
43
  selectAllLabel?: string;
44
+ /** Teksten som vises for «Velg alle»-elementet i listen
45
+ * @default "Alle valgt"
46
+ */
47
+ allItemsSelectedLabel?: string;
48
+ /** Skjermleser-tekst som for å fjerne alle valg
49
+ * @default "Fjern valgte"
50
+ */
51
+ removeAllItemsAriaLabel?: string;
44
52
  /** Ekstra klassenavn */
45
53
  className?: string;
46
54
  /** Tekst for skjemleser på knapper for å fjerne valgt element
@@ -55,13 +63,15 @@ export type MultiSelectBetaProps = {
55
63
  * @default 250
56
64
  */
57
65
  debounceTimeout?: number;
66
+ maxTags?: number;
58
67
  /** Om en knapp for å fjerne alle valg skal vises
59
68
  * @default false
60
69
  */
61
70
  clearable?: boolean;
71
+ clearInputOnSelect?: boolean;
62
72
  selectOnBlur?: boolean;
63
73
  readonly?: boolean;
64
74
  loading?: boolean;
65
75
  style?: React.CSSProperties;
66
76
  };
67
- export declare const MultiSelectBeta: ({ ariaLabelRemoveSelected, className, clearable, debounceTimeout, feedback, hideSelectAll, items: initialItems, label, listStyle, onChange, openOnFocus, placeholder, readonly, selectAllLabel, selectedItems, selectOnBlur, style, variant, ...rest }: MultiSelectBetaProps) => JSX.Element;
77
+ export declare const MultiSelectBeta: ({ allItemsSelectedLabel, ariaLabelRemoveSelected, className, clearable, clearInputOnSelect, debounceTimeout, feedback, hideSelectAll, items: initialItems, label, listStyle, maxTags, onChange, openOnFocus, placeholder, readonly, removeAllItemsAriaLabel, selectAllLabel, selectedItems, selectOnBlur, style, variant, ...rest }: MultiSelectBetaProps) => JSX.Element;
@@ -2,11 +2,11 @@ import { UseComboboxGetToggleButtonPropsOptions, UseMultipleSelectionGetSelected
2
2
  import { NormalizedDropdownItemType } from '../../useNormalizedItems';
3
3
  import React from 'react';
4
4
  import './FieldComponents.scss';
5
- export declare const SelectedElementsTag: ({ getSelectedItemProps, removeSelectedItem, selectedItem, index, ariaLabelRemoveSelected, }: {
6
- getSelectedItemProps: (options: UseMultipleSelectionGetSelectedItemPropsOptions<NormalizedDropdownItemType>) => any;
5
+ export declare const SelectedItemTag: ({ getSelectedItemProps, removeSelectedItem, selectedItem, index, ariaLabelRemoveSelected, }: {
6
+ getSelectedItemProps?: ((options: UseMultipleSelectionGetSelectedItemPropsOptions<NormalizedDropdownItemType>) => any) | undefined;
7
7
  removeSelectedItem: (item: NormalizedDropdownItemType) => void;
8
8
  selectedItem: NormalizedDropdownItemType;
9
- index: number;
9
+ index?: number | undefined;
10
10
  ariaLabelRemoveSelected: string;
11
11
  }) => JSX.Element;
12
12
  export declare const FieldAppend: React.FC<{
@@ -1434,17 +1434,18 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1434
1434
  };
1435
1435
 
1436
1436
  var _excluded$3 = ["tabIndex"];
1437
- var SelectedElementsTag = function SelectedElementsTag(_ref) {
1437
+ var SelectedItemTag = function SelectedItemTag(_ref) {
1438
+ var _getSelectedItemProps;
1438
1439
  var getSelectedItemProps = _ref.getSelectedItemProps,
1439
1440
  removeSelectedItem = _ref.removeSelectedItem,
1440
1441
  selectedItem = _ref.selectedItem,
1441
1442
  index = _ref.index,
1442
1443
  ariaLabelRemoveSelected = _ref.ariaLabelRemoveSelected;
1443
- var _getSelectedItemProps = getSelectedItemProps({
1444
+ var _ref2 = (_getSelectedItemProps = getSelectedItemProps == null ? void 0 : getSelectedItemProps({
1444
1445
  selectedItem: selectedItem,
1445
1446
  index: index
1446
- }),
1447
- selectedItemProps = _objectWithoutPropertiesLoose(_getSelectedItemProps, _excluded$3);
1447
+ })) != null ? _getSelectedItemProps : {},
1448
+ selectedItemProps = _objectWithoutPropertiesLoose(_ref2, _excluded$3);
1448
1449
  return React__default["default"].createElement(chip.TagChip, _extends({
1449
1450
  className: classNames__default["default"]('eds-dropdown__selected-element-tag')
1450
1451
  }, selectedItemProps, {
@@ -1458,21 +1459,21 @@ var SelectedElementsTag = function SelectedElementsTag(_ref) {
1458
1459
  "aria-hidden": "true"
1459
1460
  }, selectedItem.label));
1460
1461
  };
1461
- var FieldAppend = function FieldAppend(_ref2) {
1462
- var clearable = _ref2.clearable,
1463
- readOnly = _ref2.readOnly,
1464
- getToggleButtonProps = _ref2.getToggleButtonProps,
1465
- selectedItems = _ref2.selectedItems,
1466
- _ref2$loading = _ref2.loading,
1467
- loading = _ref2$loading === void 0 ? false : _ref2$loading,
1468
- _ref2$loadingText = _ref2.loadingText,
1469
- loadingText = _ref2$loadingText === void 0 ? 'Laster resultater …' : _ref2$loadingText,
1470
- ariaLabelClearItems = _ref2.ariaLabelClearItems,
1471
- clearSelectedItemsLabel = _ref2.clearSelectedItemsLabel,
1472
- isOpen = _ref2.isOpen,
1473
- onClear = _ref2.onClear,
1474
- _ref2$focusable = _ref2.focusable,
1475
- focusable = _ref2$focusable === void 0 ? false : _ref2$focusable;
1462
+ var FieldAppend = function FieldAppend(_ref3) {
1463
+ var clearable = _ref3.clearable,
1464
+ readOnly = _ref3.readOnly,
1465
+ getToggleButtonProps = _ref3.getToggleButtonProps,
1466
+ selectedItems = _ref3.selectedItems,
1467
+ _ref3$loading = _ref3.loading,
1468
+ loading = _ref3$loading === void 0 ? false : _ref3$loading,
1469
+ _ref3$loadingText = _ref3.loadingText,
1470
+ loadingText = _ref3$loadingText === void 0 ? 'Laster resultater …' : _ref3$loadingText,
1471
+ ariaLabelClearItems = _ref3.ariaLabelClearItems,
1472
+ clearSelectedItemsLabel = _ref3.clearSelectedItemsLabel,
1473
+ isOpen = _ref3.isOpen,
1474
+ onClear = _ref3.onClear,
1475
+ _ref3$focusable = _ref3.focusable,
1476
+ focusable = _ref3$focusable === void 0 ? false : _ref3$focusable;
1476
1477
  if (loading) {
1477
1478
  return React__default["default"].createElement(DropdownLoadingDots, null, loadingText);
1478
1479
  }
@@ -1494,14 +1495,14 @@ var FieldAppend = function FieldAppend(_ref2) {
1494
1495
  focusable: focusable
1495
1496
  }));
1496
1497
  };
1497
- var ClearableButton = function ClearableButton(_ref3) {
1498
- var onClear = _ref3.onClear,
1499
- _ref3$clearSelectedIt = _ref3.clearSelectedItemsLabel,
1500
- clearSelectedItemsLabel = _ref3$clearSelectedIt === void 0 ? 'Fjern valgte' : _ref3$clearSelectedIt,
1501
- _ref3$ariaLabelClearI = _ref3.ariaLabelClearItems,
1502
- ariaLabelClearItems = _ref3$ariaLabelClearI === void 0 ? 'Fjern valgte' : _ref3$ariaLabelClearI,
1503
- _ref3$focusable = _ref3.focusable,
1504
- focusable = _ref3$focusable === void 0 ? false : _ref3$focusable;
1498
+ var ClearableButton = function ClearableButton(_ref4) {
1499
+ var onClear = _ref4.onClear,
1500
+ _ref4$clearSelectedIt = _ref4.clearSelectedItemsLabel,
1501
+ clearSelectedItemsLabel = _ref4$clearSelectedIt === void 0 ? 'Fjern valgte' : _ref4$clearSelectedIt,
1502
+ _ref4$ariaLabelClearI = _ref4.ariaLabelClearItems,
1503
+ ariaLabelClearItems = _ref4$ariaLabelClearI === void 0 ? 'Fjern valgte' : _ref4$ariaLabelClearI,
1504
+ _ref4$focusable = _ref4.focusable,
1505
+ focusable = _ref4$focusable === void 0 ? false : _ref4$focusable;
1505
1506
  return React__default["default"].createElement(tooltip.Tooltip, {
1506
1507
  "aria-hidden": "true",
1507
1508
  placement: "right",
@@ -1516,15 +1517,15 @@ var ClearableButton = function ClearableButton(_ref3) {
1516
1517
  "aria-hidden": "true"
1517
1518
  })));
1518
1519
  };
1519
- var ToggleButton = function ToggleButton(_ref4) {
1520
- var getToggleButtonProps = _ref4.getToggleButtonProps,
1521
- isOpen = _ref4.isOpen,
1522
- _ref4$closeAriaLabel = _ref4.closeAriaLabel,
1523
- closeAriaLabel = _ref4$closeAriaLabel === void 0 ? 'Lukk liste med valg' : _ref4$closeAriaLabel,
1524
- _ref4$openAriaLabel = _ref4.openAriaLabel,
1525
- openAriaLabel = _ref4$openAriaLabel === void 0 ? 'Åpne liste med valg' : _ref4$openAriaLabel,
1526
- _ref4$focusable = _ref4.focusable,
1527
- focusable = _ref4$focusable === void 0 ? false : _ref4$focusable;
1520
+ var ToggleButton = function ToggleButton(_ref5) {
1521
+ var getToggleButtonProps = _ref5.getToggleButtonProps,
1522
+ isOpen = _ref5.isOpen,
1523
+ _ref5$closeAriaLabel = _ref5.closeAriaLabel,
1524
+ closeAriaLabel = _ref5$closeAriaLabel === void 0 ? 'Lukk liste med valg' : _ref5$closeAriaLabel,
1525
+ _ref5$openAriaLabel = _ref5.openAriaLabel,
1526
+ openAriaLabel = _ref5$openAriaLabel === void 0 ? 'Åpne liste med valg' : _ref5$openAriaLabel,
1527
+ _ref5$focusable = _ref5.focusable,
1528
+ focusable = _ref5$focusable === void 0 ? false : _ref5$focusable;
1528
1529
  return React__default["default"].createElement(button.IconButton, _extends({}, getToggleButtonProps({
1529
1530
  className: classNames__default["default"]('eds-dropdown-appendix__toggle-button', {
1530
1531
  'eds-dropdown-appendix__toggle-button--open': isOpen
@@ -1712,25 +1713,33 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1712
1713
  }));
1713
1714
  };
1714
1715
 
1715
- var _excluded$1 = ["ariaLabelRemoveSelected", "className", "clearable", "debounceTimeout", "feedback", "hideSelectAll", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectAllLabel", "selectedItems", "selectOnBlur", "style", "variant"];
1716
+ var _excluded$1 = ["allItemsSelectedLabel", "ariaLabelRemoveSelected", "className", "clearable", "clearInputOnSelect", "debounceTimeout", "feedback", "hideSelectAll", "items", "label", "listStyle", "maxTags", "onChange", "openOnFocus", "placeholder", "readonly", "removeAllItemsAriaLabel", "selectAllLabel", "selectedItems", "selectOnBlur", "style", "variant"];
1716
1717
  var MultiSelectBeta = function MultiSelectBeta(_ref) {
1717
- var _ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
1718
+ var _ref$allItemsSelected = _ref.allItemsSelectedLabel,
1719
+ allItemsSelectedLabel = _ref$allItemsSelected === void 0 ? 'Alle valgt' : _ref$allItemsSelected,
1720
+ _ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
1718
1721
  ariaLabelRemoveSelected = _ref$ariaLabelRemoveS === void 0 ? 'trykk for å fjerne valg' : _ref$ariaLabelRemoveS,
1719
1722
  className = _ref.className,
1720
1723
  _ref$clearable = _ref.clearable,
1721
1724
  clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1725
+ _ref$clearInputOnSele = _ref.clearInputOnSelect,
1726
+ clearInputOnSelect = _ref$clearInputOnSele === void 0 ? false : _ref$clearInputOnSele,
1722
1727
  feedback = _ref.feedback,
1723
1728
  _ref$hideSelectAll = _ref.hideSelectAll,
1724
1729
  hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
1725
1730
  initialItems = _ref.items,
1726
1731
  label = _ref.label,
1727
1732
  listStyle = _ref.listStyle,
1733
+ _ref$maxTags = _ref.maxTags,
1734
+ maxTags = _ref$maxTags === void 0 ? 10 : _ref$maxTags,
1728
1735
  onChange = _ref.onChange,
1729
1736
  _ref$openOnFocus = _ref.openOnFocus,
1730
1737
  openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1731
1738
  placeholder = _ref.placeholder,
1732
1739
  _ref$readonly = _ref.readonly,
1733
1740
  readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1741
+ _ref$removeAllItemsAr = _ref.removeAllItemsAriaLabel,
1742
+ removeAllItemsAriaLabel = _ref$removeAllItemsAr === void 0 ? 'Fjern valgte' : _ref$removeAllItemsAr,
1734
1743
  _ref$selectAllLabel = _ref.selectAllLabel,
1735
1744
  selectAllLabel = _ref$selectAllLabel === void 0 ? 'Velg alle' : _ref$selectAllLabel,
1736
1745
  selectedItems = _ref.selectedItems,
@@ -1748,10 +1757,17 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1748
1757
  normalizedItems = _useResolvedItems.items,
1749
1758
  loading = _useResolvedItems.loading,
1750
1759
  fetchItems = _useResolvedItems.fetchItems;
1760
+ var isAllNonAsyncItemsSelected = typeof initialItems !== 'function' && selectedItems.length === normalizedItems.length;
1751
1761
  var selectAll = {
1752
1762
  value: utils.useRandomId('select-all'),
1753
1763
  label: selectAllLabel
1754
1764
  };
1765
+ var summarySelectedItems = React__default["default"].useMemo(function () {
1766
+ return {
1767
+ value: '',
1768
+ label: isAllNonAsyncItemsSelected ? allItemsSelectedLabel : selectedItems.length + ' valgte'
1769
+ };
1770
+ }, [isAllNonAsyncItemsSelected, selectedItems, normalizedItems, allItemsSelectedLabel]);
1755
1771
  var _useState = React.useState([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems)),
1756
1772
  listItems = _useState[0],
1757
1773
  setListItems = _useState[1];
@@ -1761,6 +1777,12 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1761
1777
  return lowerCaseFilterTest(item, inputValue);
1762
1778
  })));
1763
1779
  };
1780
+ var updateListItems = function updateListItems(inputValue) {
1781
+ if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : ''); // fetch items only if user provides a function as items
1782
+ filterListItems({
1783
+ inputValue: inputValue != null ? inputValue : ''
1784
+ });
1785
+ };
1764
1786
  React__default["default"].useEffect(function () {
1765
1787
  filterListItems({
1766
1788
  inputValue: inputValue
@@ -1792,23 +1814,24 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1792
1814
  getDropdownProps = _useMultipleSelection.getDropdownProps,
1793
1815
  removeSelectedItem = _useMultipleSelection.removeSelectedItem;
1794
1816
  var stateReducer = React__default["default"].useCallback(function (_, _ref3) {
1795
- var _inputRef$current$val, _inputRef$current, _inputRef$current$val2, _inputRef$current2, _changes$inputValue, _changes$inputValue2, _changes$inputValue3;
1817
+ var _inputRef$current$val, _inputRef$current, _inputRef$current$val2, _inputRef$current2, _changes$inputValue;
1796
1818
  var changes = _ref3.changes,
1797
1819
  type = _ref3.type;
1798
1820
  if (changes != null && changes.highlightedIndex && (changes == null ? void 0 : changes.highlightedIndex) >= 0) setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
1799
1821
  switch (type) {
1800
1822
  case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1801
1823
  case Downshift.useCombobox.stateChangeTypes.ItemClick:
1824
+ if (clearInputOnSelect) {
1825
+ updateListItems('');
1826
+ }
1802
1827
  return _extends({}, changes, {
1803
1828
  isOpen: true,
1804
- inputValue: (_inputRef$current$val = inputRef == null ? void 0 : (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : '' // don't reset input value on select
1829
+ inputValue: clearInputOnSelect ? '' : (_inputRef$current$val = inputRef == null ? void 0 : (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : ''
1805
1830
  });
1806
-
1807
1831
  case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1808
1832
  return _extends({}, changes, {
1809
- inputValue: (_inputRef$current$val2 = inputRef == null ? void 0 : (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : '' // don't reset input value on select
1833
+ inputValue: clearInputOnSelect ? '' : (_inputRef$current$val2 = inputRef == null ? void 0 : (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : ''
1810
1834
  });
1811
-
1812
1835
  case Downshift.useCombobox.stateChangeTypes.InputChange:
1813
1836
  if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(/^\s+/g)) {
1814
1837
  var _changes$inputValue$r;
@@ -1817,10 +1840,7 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1817
1840
  inputValue: (_changes$inputValue$r = changes.inputValue.replace(/^\s+/g, '')) != null ? _changes$inputValue$r : ''
1818
1841
  });
1819
1842
  }
1820
- if (typeof initialItems === 'function') fetchItems((_changes$inputValue2 = changes.inputValue) != null ? _changes$inputValue2 : ''); // fetch items only if user provides a function as items
1821
- filterListItems({
1822
- inputValue: (_changes$inputValue3 = changes.inputValue) != null ? _changes$inputValue3 : ''
1823
- });
1843
+ updateListItems(changes.inputValue);
1824
1844
  return changes;
1825
1845
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
1826
1846
  return _extends({}, changes, {
@@ -1871,6 +1891,13 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1871
1891
  isOpen = _useCombobox.isOpen,
1872
1892
  openMenu = _useCombobox.openMenu,
1873
1893
  setInputValue = _useCombobox.setInputValue;
1894
+ var handleOnClear = function handleOnClear() {
1895
+ var _inputRef$current3;
1896
+ onChange([]);
1897
+ setInputValue('');
1898
+ (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.focus();
1899
+ updateListItems(inputValue);
1900
+ };
1874
1901
  // role=combobox leads to strange VoiceOver behavior and is therefor omitted
1875
1902
  // const { role: _, ...comboboxProps } = getComboboxProps();
1876
1903
  var _getComboboxProps = getComboboxProps(),
@@ -1882,16 +1909,11 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1882
1909
  selectedItems: selectedItems,
1883
1910
  isOpen: isOpen,
1884
1911
  clearable: clearable,
1912
+ clearSelectedItemsLabel: removeAllItemsAriaLabel,
1885
1913
  loading: loading,
1886
1914
  loadingText: '',
1887
1915
  readOnly: readonly,
1888
- onClear: function onClear() {
1889
- var _inputRef$current3;
1890
- onChange([]);
1891
- setInputValue('');
1892
- (_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.focus();
1893
- if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : '');
1894
- },
1916
+ onClear: handleOnClear,
1895
1917
  getToggleButtonProps: getToggleButtonProps
1896
1918
  }),
1897
1919
  className: classNames__default["default"]('eds-dropdown', className),
@@ -1912,8 +1934,8 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1912
1934
  var _inputRef$current4;
1913
1935
  if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
1914
1936
  }
1915
- }, selectedItems.map(function (selectedItem, index) {
1916
- return React__default["default"].createElement(SelectedElementsTag, {
1937
+ }, selectedItems.length < maxTags ? selectedItems.map(function (selectedItem, index) {
1938
+ return React__default["default"].createElement(SelectedItemTag, {
1917
1939
  index: index,
1918
1940
  key: selectedItem.value,
1919
1941
  getSelectedItemProps: getSelectedItemProps,
@@ -1921,6 +1943,10 @@ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1921
1943
  removeSelectedItem: removeSelectedItem,
1922
1944
  ariaLabelRemoveSelected: ariaLabelRemoveSelected
1923
1945
  });
1946
+ }) : React__default["default"].createElement(SelectedItemTag, {
1947
+ selectedItem: summarySelectedItems,
1948
+ removeSelectedItem: handleOnClear,
1949
+ ariaLabelRemoveSelected: removeAllItemsAriaLabel
1924
1950
  }), React__default["default"].createElement("input", _extends({
1925
1951
  placeholder: placeholder,
1926
1952
  className: "eds-dropdown__input eds-form-control",