@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.
- package/dist/MultiSelect.d.ts +1 -1
- package/dist/SearchableDropdown.d.ts +1 -1
- package/dist/dropdown.cjs.development.js +72 -44
- package/dist/dropdown.cjs.development.js.map +1 -1
- package/dist/dropdown.cjs.production.min.js +1 -1
- package/dist/dropdown.cjs.production.min.js.map +1 -1
- package/dist/dropdown.esm.js +73 -45
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +165 -168
- package/dist/utils.d.ts +2 -0
- package/package.json +4 -4
package/dist/dropdown.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mergeRefs, debounce, useRandomId, warnAboutMissingStyles } from '@entur/utils';
|
|
2
|
-
import React, { useState, useRef } from 'react';
|
|
2
|
+
import React, { useState, useRef, useEffect } from 'react';
|
|
3
3
|
import Downshift, { useSelect, useCombobox, useMultipleSelection } from 'downshift';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
import { BaseFormControl, VariantProvider, FeedbackText, Checkbox } from '@entur/form';
|
|
@@ -1407,7 +1407,7 @@ var FieldAppend$1 = function FieldAppend(_ref3) {
|
|
|
1407
1407
|
selectedItems = _ref3.selectedItems;
|
|
1408
1408
|
if (loading) {
|
|
1409
1409
|
return React.createElement("div", {
|
|
1410
|
-
className: 'eds-
|
|
1410
|
+
className: 'eds-dropdown__appendix__toggle-button--loading-dots'
|
|
1411
1411
|
}, React.createElement(LoadingDots, {
|
|
1412
1412
|
"aria-label": loadingText
|
|
1413
1413
|
}));
|
|
@@ -1416,13 +1416,13 @@ var FieldAppend$1 = function FieldAppend(_ref3) {
|
|
|
1416
1416
|
return null;
|
|
1417
1417
|
}
|
|
1418
1418
|
return React.createElement("div", {
|
|
1419
|
-
className: "eds-
|
|
1419
|
+
className: "eds-dropdown__appendix"
|
|
1420
1420
|
}, clearable && (selectedItems == null ? void 0 : selectedItems.length) > 0 && selectedItems[0] !== null && React.createElement(React.Fragment, null, React.createElement(ClearableButton, {
|
|
1421
1421
|
onClear: onClear,
|
|
1422
1422
|
focusable: true,
|
|
1423
1423
|
labelClearSelectedItems: labelClearSelectedItems
|
|
1424
1424
|
}), React.createElement("div", {
|
|
1425
|
-
className: "eds-
|
|
1425
|
+
className: "eds-dropdown__appendix__divider"
|
|
1426
1426
|
})), React.createElement(ToggleButton, {
|
|
1427
1427
|
"aria-hidden": ariaHiddenToggleButton,
|
|
1428
1428
|
ariaLabelCloseList: ariaLabelCloseList,
|
|
@@ -1442,9 +1442,9 @@ var ClearableButton = function ClearableButton(_ref4) {
|
|
|
1442
1442
|
"aria-hidden": "true",
|
|
1443
1443
|
placement: "top",
|
|
1444
1444
|
content: labelClearSelectedItems,
|
|
1445
|
-
className: "eds-
|
|
1445
|
+
className: "eds-dropdown__appendix__clear-button__tooltip"
|
|
1446
1446
|
}, React.createElement(IconButton, {
|
|
1447
|
-
className: "eds-
|
|
1447
|
+
className: "eds-dropdown__appendix__clear-button",
|
|
1448
1448
|
type: "button",
|
|
1449
1449
|
tabIndex: focusable ? 0 : 1,
|
|
1450
1450
|
onClick: onClear,
|
|
@@ -1465,8 +1465,8 @@ var ToggleButton = function ToggleButton(_ref5) {
|
|
|
1465
1465
|
_ref5$focusable = _ref5.focusable,
|
|
1466
1466
|
focusable = _ref5$focusable === void 0 ? false : _ref5$focusable;
|
|
1467
1467
|
return React.createElement(IconButton, _extends({}, getToggleButtonProps({
|
|
1468
|
-
className: classNames('eds-
|
|
1469
|
-
'eds-
|
|
1468
|
+
className: classNames('eds-dropdown__appendix__toggle-button', {
|
|
1469
|
+
'eds-dropdown__appendix__toggle-button--open': isOpen
|
|
1470
1470
|
}),
|
|
1471
1471
|
'aria-labelledby': undefined
|
|
1472
1472
|
}), {
|
|
@@ -1489,9 +1489,19 @@ function lowerCaseFilterTest(item, input) {
|
|
|
1489
1489
|
var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
|
|
1490
1490
|
return inputRegex.test(item.label);
|
|
1491
1491
|
}
|
|
1492
|
+
function noFilter(
|
|
1493
|
+
//@ts-expect-error only here to comply with dropdown filter API
|
|
1494
|
+
item,
|
|
1495
|
+
//@ts-expect-error only here to comply with dropdown filter API
|
|
1496
|
+
input) {
|
|
1497
|
+
return true;
|
|
1498
|
+
}
|
|
1492
1499
|
var itemToString = function itemToString(item) {
|
|
1493
1500
|
return item ? item.label : '';
|
|
1494
1501
|
};
|
|
1502
|
+
var isFunctionWithQueryArgument = function isFunctionWithQueryArgument(object) {
|
|
1503
|
+
return typeof object === 'function' && object.length > 0;
|
|
1504
|
+
};
|
|
1495
1505
|
var useMultiselectUtils = function useMultiselectUtils(_ref) {
|
|
1496
1506
|
var listItems = _ref.listItems,
|
|
1497
1507
|
selectedItems = _ref.selectedItems,
|
|
@@ -1500,11 +1510,20 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
|
|
|
1500
1510
|
var listItemsWithoutSelectAll = listItems.filter(function (item) {
|
|
1501
1511
|
return item.value !== selectAll.value;
|
|
1502
1512
|
});
|
|
1503
|
-
var
|
|
1504
|
-
return !selectedItems.
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1513
|
+
var unselectedItemsInListItems = listItemsWithoutSelectAll.filter(function (listItem) {
|
|
1514
|
+
return !selectedItems.some(function (selectedItem) {
|
|
1515
|
+
return selectedItem.value === listItem.value;
|
|
1516
|
+
});
|
|
1517
|
+
});
|
|
1518
|
+
var allListItemsAreSelected = !listItemsWithoutSelectAll.some(function (listItem) {
|
|
1519
|
+
return !selectedItems.some(function (selectedItem) {
|
|
1520
|
+
return selectedItem.value === listItem.value;
|
|
1521
|
+
});
|
|
1522
|
+
});
|
|
1523
|
+
var someListItemsAreSelected = listItemsWithoutSelectAll.some(function (listItem) {
|
|
1524
|
+
return selectedItems.some(function (selectedItem) {
|
|
1525
|
+
return selectedItem.value === listItem.value;
|
|
1526
|
+
});
|
|
1508
1527
|
});
|
|
1509
1528
|
var addClickedItemToSelectedItems = function addClickedItemToSelectedItems(clickedItem, onChange) {
|
|
1510
1529
|
return onChange([].concat(selectedItems, [clickedItem]));
|
|
@@ -1545,14 +1564,15 @@ var useMultiselectUtils = function useMultiselectUtils(_ref) {
|
|
|
1545
1564
|
return false;
|
|
1546
1565
|
};
|
|
1547
1566
|
var selectAllUnselectedItemsInListItems = function selectAllUnselectedItemsInListItems(onChange) {
|
|
1548
|
-
onChange([].concat(selectedItems,
|
|
1549
|
-
return !selectedItems.includes(item);
|
|
1550
|
-
})));
|
|
1567
|
+
onChange([].concat(selectedItems, unselectedItemsInListItems));
|
|
1551
1568
|
};
|
|
1552
1569
|
var unselectAllListItems = function unselectAllListItems(onChange) {
|
|
1553
|
-
|
|
1554
|
-
return !listItemsWithoutSelectAll.
|
|
1555
|
-
|
|
1570
|
+
var selectedItemsWithoutItemsInListItems = selectedItems.filter(function (selectedItem) {
|
|
1571
|
+
return !listItemsWithoutSelectAll.some(function (listItem) {
|
|
1572
|
+
return listItem.value === selectedItem.value;
|
|
1573
|
+
});
|
|
1574
|
+
});
|
|
1575
|
+
onChange(selectedItemsWithoutItemsInListItems);
|
|
1556
1576
|
};
|
|
1557
1577
|
return {
|
|
1558
1578
|
addClickedItemToSelectedItems: addClickedItemToSelectedItems,
|
|
@@ -1618,7 +1638,7 @@ var isVoiceOverClick = function isVoiceOverClick(clickEvent) {
|
|
|
1618
1638
|
};
|
|
1619
1639
|
/* end a11y utils */
|
|
1620
1640
|
|
|
1621
|
-
var _excluded$3 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "
|
|
1641
|
+
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"];
|
|
1622
1642
|
var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
1623
1643
|
var _selectedItem$label;
|
|
1624
1644
|
var ariaLabelCloseList = _ref.ariaLabelCloseList,
|
|
@@ -1632,9 +1652,9 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
1632
1652
|
_ref$disableLabelAnim = _ref.disableLabelAnimation,
|
|
1633
1653
|
disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
|
|
1634
1654
|
feedback = _ref.feedback,
|
|
1635
|
-
_ref$itemFilter = _ref.itemFilter,
|
|
1636
|
-
itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
|
|
1637
1655
|
initialItems = _ref.items,
|
|
1656
|
+
_ref$itemFilter = _ref.itemFilter,
|
|
1657
|
+
itemFilter = _ref$itemFilter === void 0 ? isFunctionWithQueryArgument(initialItems) ? noFilter : lowerCaseFilterTest : _ref$itemFilter,
|
|
1638
1658
|
label = _ref.label,
|
|
1639
1659
|
_ref$labelClearSelect = _ref.labelClearSelectedItem,
|
|
1640
1660
|
labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
|
|
@@ -1674,7 +1694,8 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
1674
1694
|
};
|
|
1675
1695
|
var updateListItems = function updateListItems(_ref3) {
|
|
1676
1696
|
var inputValue = _ref3.inputValue;
|
|
1677
|
-
|
|
1697
|
+
var shouldRefetchItems = isFunctionWithQueryArgument(initialItems);
|
|
1698
|
+
if (shouldRefetchItems) fetchItems(inputValue != null ? inputValue : EMPTY_INPUT);
|
|
1678
1699
|
filterListItems({
|
|
1679
1700
|
inputValue: inputValue != null ? inputValue : EMPTY_INPUT
|
|
1680
1701
|
});
|
|
@@ -1697,7 +1718,7 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
1697
1718
|
case useCombobox.stateChangeTypes.InputBlur:
|
|
1698
1719
|
case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
|
|
1699
1720
|
{
|
|
1700
|
-
|
|
1721
|
+
updateListItems({
|
|
1701
1722
|
inputValue: EMPTY_INPUT
|
|
1702
1723
|
});
|
|
1703
1724
|
return _extends({}, changes, {
|
|
@@ -1804,16 +1825,14 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
1804
1825
|
prepend: prepend,
|
|
1805
1826
|
readOnly: readOnly,
|
|
1806
1827
|
variant: variant
|
|
1807
|
-
}, rest), !hideSelectedItem && selectedItem &&
|
|
1808
|
-
className: "eds-
|
|
1809
|
-
"aria-hidden": "true"
|
|
1810
|
-
}, React.createElement("span", {
|
|
1811
|
-
className: "eds-dropdown__selected-item",
|
|
1828
|
+
}, rest), !hideSelectedItem && selectedItem !== null && inputValue === '' && React.createElement("span", {
|
|
1829
|
+
className: "eds-dropdown--searchable__selected-item",
|
|
1830
|
+
"aria-hidden": "true",
|
|
1812
1831
|
onClick: function onClick() {
|
|
1813
1832
|
var _inputRef$current2;
|
|
1814
1833
|
return (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.focus();
|
|
1815
1834
|
}
|
|
1816
|
-
}, selectedItem.label)
|
|
1835
|
+
}, selectedItem.label), React.createElement("input", _extends({
|
|
1817
1836
|
className: "eds-dropdown__input eds-form-control",
|
|
1818
1837
|
disabled: readOnly || disabled,
|
|
1819
1838
|
placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder
|
|
@@ -1841,7 +1860,7 @@ var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
|
1841
1860
|
}));
|
|
1842
1861
|
};
|
|
1843
1862
|
|
|
1844
|
-
var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "feedback", "hideSelectAll", "
|
|
1863
|
+
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"];
|
|
1845
1864
|
var MultiSelect = function MultiSelect(_ref) {
|
|
1846
1865
|
var className = _ref.className,
|
|
1847
1866
|
_ref$clearable = _ref.clearable,
|
|
@@ -1854,9 +1873,9 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1854
1873
|
feedback = _ref.feedback,
|
|
1855
1874
|
_ref$hideSelectAll = _ref.hideSelectAll,
|
|
1856
1875
|
hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
|
|
1857
|
-
_ref$itemFilter = _ref.itemFilter,
|
|
1858
|
-
itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
|
|
1859
1876
|
initialItems = _ref.items,
|
|
1877
|
+
_ref$itemFilter = _ref.itemFilter,
|
|
1878
|
+
itemFilter = _ref$itemFilter === void 0 ? isFunctionWithQueryArgument(initialItems) ? noFilter : lowerCaseFilterTest : _ref$itemFilter,
|
|
1860
1879
|
label = _ref.label,
|
|
1861
1880
|
_ref$labelAllItemsSel = _ref.labelAllItemsSelected,
|
|
1862
1881
|
labelAllItemsSelected = _ref$labelAllItemsSel === void 0 ? 'Alle valgt' : _ref$labelAllItemsSel,
|
|
@@ -1875,7 +1894,8 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1875
1894
|
placeholder = _ref.placeholder,
|
|
1876
1895
|
_ref$readOnly = _ref.readOnly,
|
|
1877
1896
|
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
1878
|
-
selectedItems = _ref.selectedItems,
|
|
1897
|
+
_ref$selectedItems = _ref.selectedItems,
|
|
1898
|
+
selectedItems = _ref$selectedItems === void 0 ? [] : _ref$selectedItems,
|
|
1879
1899
|
_ref$selectOnBlur = _ref.selectOnBlur,
|
|
1880
1900
|
selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
|
|
1881
1901
|
style = _ref.style,
|
|
@@ -1901,6 +1921,10 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1901
1921
|
lastRemovedItem = _React$useState2[0],
|
|
1902
1922
|
setLastRemovedItem = _React$useState2[1];
|
|
1903
1923
|
var inputRef = useRef(null);
|
|
1924
|
+
useEffect(function () {
|
|
1925
|
+
//@ts-expect-error this is done to aid developers debug wrong prop usage
|
|
1926
|
+
if (rest.selectedItem !== undefined) console.warn("Incorrect 'selectedItem' prop found, did you mean to use 'selectedItems?");
|
|
1927
|
+
}, []);
|
|
1904
1928
|
var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
|
|
1905
1929
|
normalizedItems = _useResolvedItems.items,
|
|
1906
1930
|
loading = _useResolvedItems.loading,
|
|
@@ -1930,7 +1954,8 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1930
1954
|
};
|
|
1931
1955
|
var updateListItems = function updateListItems(_ref3) {
|
|
1932
1956
|
var inputValue = _ref3.inputValue;
|
|
1933
|
-
|
|
1957
|
+
var shouldRefetchItems = isFunctionWithQueryArgument(initialItems);
|
|
1958
|
+
if (shouldRefetchItems) fetchItems(inputValue != null ? inputValue : EMPTY_INPUT);
|
|
1934
1959
|
filterListItems({
|
|
1935
1960
|
inputValue: inputValue != null ? inputValue : EMPTY_INPUT
|
|
1936
1961
|
});
|
|
@@ -2033,6 +2058,9 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
2033
2058
|
// reset input value when leaving input field
|
|
2034
2059
|
case useCombobox.stateChangeTypes.InputBlur:
|
|
2035
2060
|
{
|
|
2061
|
+
updateListItems({
|
|
2062
|
+
inputValue: EMPTY_INPUT
|
|
2063
|
+
});
|
|
2036
2064
|
return _extends({}, changes, {
|
|
2037
2065
|
inputValue: EMPTY_INPUT
|
|
2038
2066
|
});
|
|
@@ -2125,16 +2153,16 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
2125
2153
|
label: label,
|
|
2126
2154
|
labelId: getLabelProps().id,
|
|
2127
2155
|
labelProps: getLabelProps(),
|
|
2128
|
-
readOnly: readOnly,
|
|
2129
|
-
variant: variant
|
|
2130
|
-
}, rest), React.createElement("div", {
|
|
2131
|
-
className: classNames('eds-dropdown__selected-items-and-input', {
|
|
2132
|
-
'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
|
|
2133
|
-
}),
|
|
2134
2156
|
onClick: function onClick(e) {
|
|
2135
2157
|
var _inputRef$current4;
|
|
2136
2158
|
if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
|
|
2137
|
-
}
|
|
2159
|
+
},
|
|
2160
|
+
readOnly: readOnly,
|
|
2161
|
+
variant: variant
|
|
2162
|
+
}, rest), React.createElement("div", {
|
|
2163
|
+
className: classNames('eds-dropdown--multiselect__selected-items-and-input', {
|
|
2164
|
+
'eds-dropdown--multiselect__selected-items-and-input--filled': hasSelectedItems
|
|
2165
|
+
})
|
|
2138
2166
|
}, selectedItems.length < maxChips ? React.createElement(React.Fragment, null, selectedItems.length > 1 ? React.createElement(VisuallyHidden, {
|
|
2139
2167
|
onClick: function onClick() {
|
|
2140
2168
|
var _inputRef$current5;
|
|
@@ -2291,12 +2319,12 @@ var Dropdown = function Dropdown(_ref) {
|
|
|
2291
2319
|
readOnly: readOnly,
|
|
2292
2320
|
variant: variant
|
|
2293
2321
|
}, rest), React.createElement("div", _extends({
|
|
2294
|
-
className: "eds-dropdown__selected-item
|
|
2322
|
+
className: "eds-dropdown__selected-item"
|
|
2295
2323
|
}, getToggleButtonProps({
|
|
2296
2324
|
id: undefined
|
|
2297
2325
|
})), (_ref3 = (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : React.createElement("span", {
|
|
2298
|
-
className: classNames('eds-dropdown__selected-
|
|
2299
|
-
'eds-dropdown__selected-
|
|
2326
|
+
className: classNames('eds-dropdown__selected-item__placeholder', {
|
|
2327
|
+
'eds-dropdown__selected-item__placeholder--readonly': readOnly
|
|
2300
2328
|
})
|
|
2301
2329
|
}, placeholder)) != null ? _ref3 : '')), React.createElement(DropdownList, {
|
|
2302
2330
|
getItemProps: getItemProps,
|