@entur/dropdown 4.0.10 → 5.0.0-beta.1

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.
@@ -12,6 +12,8 @@ var a11y = require('@entur/a11y');
12
12
  var loader = require('@entur/loader');
13
13
  var tokens = require('@entur/tokens');
14
14
  var button = require('@entur/button');
15
+ var chip = require('@entur/chip');
16
+ var tooltip = require('@entur/tooltip');
15
17
 
16
18
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
19
 
@@ -380,7 +382,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
380
382
  return target;
381
383
  }
382
384
 
383
- var _excluded$a = ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"];
385
+ var _excluded$d = ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"];
384
386
  var DownshiftContext = /*#__PURE__*/React__default["default"].createContext(null);
385
387
  var DownshiftProvider = function DownshiftProvider(_ref) {
386
388
  var children = _ref.children,
@@ -398,7 +400,7 @@ var DownshiftProvider = function DownshiftProvider(_ref) {
398
400
  style = _ref.style,
399
401
  _ref$searchable = _ref.searchable,
400
402
  searchable = _ref$searchable === void 0 ? false : _ref$searchable,
401
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
403
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$d);
402
404
  var handleStateChange = function handleStateChange(changes, stateAndHelpers) {
403
405
  if (changes.type === Downshift__default["default"].stateChangeTypes.controlledPropUpdatedSelectedItem) {
404
406
  return;
@@ -458,10 +460,10 @@ var useDownshift = function useDownshift() {
458
460
  return context;
459
461
  };
460
462
 
461
- var _excluded$9 = ["items"];
463
+ var _excluded$c = ["items"];
462
464
  var DropdownList$1 = function DropdownList(_ref) {
463
465
  var items = _ref.items,
464
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
466
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$c);
465
467
  var _useDownshift = useDownshift(),
466
468
  highlightedIndex = _useDownshift.highlightedIndex,
467
469
  isOpen = _useDownshift.isOpen,
@@ -509,17 +511,17 @@ var DropdownToggleButton$1 = function DropdownToggleButton() {
509
511
  }), React__default["default"].createElement(icons.DownArrowIcon, null));
510
512
  };
511
513
 
512
- var _excluded$8 = ["className", "children"];
514
+ var _excluded$b = ["className", "children"];
513
515
  var DropdownLoadingDots = function DropdownLoadingDots(_ref) {
514
516
  var className = _ref.className,
515
517
  children = _ref.children,
516
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
518
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
517
519
  return React__default["default"].createElement("div", _extends({
518
520
  className: classNames__default["default"]('eds-inline-spinner', className)
519
521
  }, rest), React__default["default"].createElement(loader.LoadingDots, null), React__default["default"].createElement(a11y.VisuallyHidden, null, children));
520
522
  };
521
523
 
522
- var _excluded$7 = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
524
+ var _excluded$a = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
523
525
  var BaseDropdown = function BaseDropdown(_ref) {
524
526
  var children = _ref.children,
525
527
  className = _ref.className,
@@ -535,14 +537,14 @@ var BaseDropdown = function BaseDropdown(_ref) {
535
537
  _ref$isFilled = _ref.isFilled,
536
538
  isFilled = _ref$isFilled === void 0 ? false : _ref$isFilled,
537
539
  disableLabelAnimation = _ref.disableLabelAnimation,
538
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
540
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
539
541
  var _useDownshift = useDownshift(),
540
542
  getLabelProps = _useDownshift.getLabelProps;
541
543
  return React__default["default"].createElement("div", {
542
544
  className: "eds-dropdown-wrapper",
543
545
  style: style
544
546
  }, React__default["default"].createElement(form.BaseFormControl, _extends({
545
- append: React__default["default"].createElement(Appendix$2, {
547
+ append: React__default["default"].createElement(Appendix$1, {
546
548
  clearable: clearable,
547
549
  loading: loading,
548
550
  loadingText: loadingText,
@@ -578,7 +580,7 @@ var ClearButton$1 = function ClearButton(_ref2) {
578
580
  className: "eds-dropdown__divider"
579
581
  }));
580
582
  };
581
- var Appendix$2 = function Appendix(_ref3) {
583
+ var Appendix$1 = function Appendix(_ref3) {
582
584
  var clearable = _ref3.clearable,
583
585
  loading = _ref3.loading,
584
586
  loadingText = _ref3.loadingText,
@@ -592,7 +594,7 @@ var Appendix$2 = function Appendix(_ref3) {
592
594
  return clearable ? React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(ClearButton$1, null), " ", React__default["default"].createElement(DropdownToggleButton$1, null)) : React__default["default"].createElement(DropdownToggleButton$1, null);
593
595
  };
594
596
 
595
- var _excluded$6 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
597
+ var _excluded$9 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
596
598
  var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
597
599
  var disabled = _ref.disabled,
598
600
  _ref$placeholder = _ref.placeholder,
@@ -609,7 +611,7 @@ var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function
609
611
  loadingText = _ref.loadingText,
610
612
  className = _ref.className,
611
613
  clearable = _ref.clearable,
612
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
614
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
613
615
  var _useDownshift = useDownshift(),
614
616
  getToggleButtonProps = _useDownshift.getToggleButtonProps,
615
617
  selectedItem = _useDownshift.selectedItem,
@@ -670,7 +672,7 @@ var RegularDropdown = /*#__PURE__*/React__default["default"].forwardRef(function
670
672
  }), selectedItem ? selectedItem.label : placeholder));
671
673
  });
672
674
 
673
- var _excluded$5 = ["disabled", "className", "items", "loading", "loadingText", "readOnly", "prepend", "selectOnTab", "openOnFocus", "listStyle", "clearable", "itemFilter", "label", "disableLabelAnimation", "placeholder"];
675
+ var _excluded$8 = ["disabled", "className", "items", "loading", "loadingText", "readOnly", "prepend", "selectOnTab", "openOnFocus", "listStyle", "clearable", "itemFilter", "label", "disableLabelAnimation", "placeholder"];
674
676
  function LowerCaseFilterTest(item, input) {
675
677
  if (!input) {
676
678
  return true;
@@ -702,7 +704,7 @@ var SearchableDropdown = /*#__PURE__*/React__default["default"].forwardRef(funct
702
704
  label = _ref.label,
703
705
  disableLabelAnimation = _ref.disableLabelAnimation,
704
706
  placeholder = _ref.placeholder,
705
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
707
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
706
708
  var _useDownshift = useDownshift(),
707
709
  getInputProps = _useDownshift.getInputProps,
708
710
  inputValue = _useDownshift.inputValue,
@@ -891,7 +893,7 @@ debounceTimeout) {
891
893
  if (isItemsFunction) {
892
894
  fetchItems('');
893
895
  }
894
- }, [isItemsFunction, fetchItems]);
896
+ }, [isItemsFunction]); // eslint-disable-line react-hooks/exhaustive-deps
895
897
  return {
896
898
  items: normalizedItems,
897
899
  loading: isItemsFunction ? loading : false,
@@ -899,7 +901,7 @@ debounceTimeout) {
899
901
  };
900
902
  };
901
903
 
902
- var _excluded$4 = ["highlightFirstItemOnOpen", "debounceTimeout", "disabled", "feedback", "items", "label", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "searchable", "selectOnTab", "openOnFocus", "variant", "value", "clearable", "className", "style", "listStyle", "itemFilter", "disableLabelAnimation"];
904
+ var _excluded$7 = ["highlightFirstItemOnOpen", "debounceTimeout", "disabled", "feedback", "items", "label", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "searchable", "selectOnTab", "openOnFocus", "variant", "value", "clearable", "className", "style", "listStyle", "itemFilter", "disableLabelAnimation"];
903
905
  var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
904
906
  var highlightFirstItemOnOpen = _ref.highlightFirstItemOnOpen,
905
907
  debounceTimeout = _ref.debounceTimeout,
@@ -927,7 +929,7 @@ var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
927
929
  listStyle = _ref.listStyle,
928
930
  itemFilter = _ref.itemFilter,
929
931
  disableLabelAnimation = _ref.disableLabelAnimation,
930
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
932
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
931
933
  var _useResolvedItems = useResolvedItems(items, debounceTimeout),
932
934
  normalizedItems = _useResolvedItems.items,
933
935
  loading = _useResolvedItems.loading,
@@ -974,7 +976,7 @@ var Dropdown = /*#__PURE__*/React__default["default"].forwardRef(function (_ref,
974
976
  }, searchAbleProps))));
975
977
  });
976
978
 
977
- var _excluded$3 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
979
+ var _excluded$6 = ["className", "disabled", "readOnly", "items", "loadingText", "prepend", "style", "label", "variant", "feedback", "disableLabelAnimation"];
978
980
  var NativeDropdown = function NativeDropdown(_ref) {
979
981
  var className = _ref.className,
980
982
  _ref$disabled = _ref.disabled,
@@ -989,7 +991,7 @@ var NativeDropdown = function NativeDropdown(_ref) {
989
991
  variant = _ref.variant,
990
992
  feedback = _ref.feedback,
991
993
  disableLabelAnimation = _ref.disableLabelAnimation,
992
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
994
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
993
995
  var _useResolvedItems = useResolvedItems(items),
994
996
  normalizedItems = _useResolvedItems.items,
995
997
  loading = _useResolvedItems.loading;
@@ -1032,7 +1034,7 @@ var NativeDropdown = function NativeDropdown(_ref) {
1032
1034
  })));
1033
1035
  };
1034
1036
 
1035
- var _excluded$2 = ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"];
1037
+ var _excluded$5 = ["className", "clearable", "debounceTimeout", "disabled", "feedback", "initialSelectedItems", "items", "itemsSelectedLabel", "label", "listStyle", "loading", "loadingText", "onChange", "openOnFocus", "readOnly", "style", "variant"];
1036
1038
  var MultiSelectContext = /*#__PURE__*/React__default["default"].createContext(null);
1037
1039
  var useMultiSelectContext = function useMultiSelectContext() {
1038
1040
  var context = React__default["default"].useContext(MultiSelectContext);
@@ -1059,36 +1061,36 @@ actionAndChanges) {
1059
1061
  }
1060
1062
  }
1061
1063
  var MultiSelect = function MultiSelect(_ref) {
1062
- var input = _ref.items,
1064
+ var className = _ref.className,
1065
+ _ref$clearable = _ref.clearable,
1066
+ clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1067
+ debounceTimeout = _ref.debounceTimeout,
1068
+ disabled = _ref.disabled,
1069
+ feedback = _ref.feedback,
1070
+ _ref$initialSelectedI = _ref.initialSelectedItems,
1071
+ initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
1072
+ input = _ref.items,
1063
1073
  _ref$itemsSelectedLab = _ref.itemsSelectedLabel,
1064
1074
  itemsSelectedLabel = _ref$itemsSelectedLab === void 0 ? function (items) {
1065
1075
  return SelectedItemsLabel(items);
1066
1076
  } : _ref$itemsSelectedLab,
1067
1077
  label = _ref.label,
1068
- feedback = _ref.feedback,
1069
- variant = _ref.variant,
1070
- disabled = _ref.disabled,
1071
- _ref$readOnly = _ref.readOnly,
1072
- readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1073
- _ref$onChange = _ref.onChange,
1074
- onChange = _ref$onChange === void 0 ? function () {
1075
- return undefined;
1076
- } : _ref$onChange,
1077
- className = _ref.className,
1078
- _ref$clearable = _ref.clearable,
1079
- clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1078
+ listStyle = _ref.listStyle,
1080
1079
  _ref$loading = _ref.loading,
1081
1080
  loading = _ref$loading === void 0 ? false : _ref$loading,
1082
1081
  _ref$loadingText = _ref.loadingText,
1083
1082
  loadingText = _ref$loadingText === void 0 ? '' : _ref$loadingText,
1083
+ _ref$onChange = _ref.onChange,
1084
+ onChange = _ref$onChange === void 0 ? function () {
1085
+ return undefined;
1086
+ } : _ref$onChange,
1084
1087
  _ref$openOnFocus = _ref.openOnFocus,
1085
1088
  openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1089
+ _ref$readOnly = _ref.readOnly,
1090
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
1086
1091
  style = _ref.style,
1087
- listStyle = _ref.listStyle,
1088
- _ref$initialSelectedI = _ref.initialSelectedItems,
1089
- initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
1090
- debounceTimeout = _ref.debounceTimeout,
1091
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1092
+ variant = _ref.variant,
1093
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
1092
1094
  var _useResolvedItems = useResolvedItems(input, debounceTimeout),
1093
1095
  items = _useResolvedItems.items;
1094
1096
  var _useState = React.useState(initialSelectedItems),
@@ -1154,7 +1156,7 @@ var MultiSelect = function MultiSelect(_ref) {
1154
1156
  isFilled: selectedItems.length > 0 || isOpen,
1155
1157
  disabled: disabled,
1156
1158
  readOnly: readOnly,
1157
- append: React__default["default"].createElement(Appendix$1, {
1159
+ append: React__default["default"].createElement(Appendix, {
1158
1160
  hasSelected: clearable && selectedItems.length > 0,
1159
1161
  loading: loading,
1160
1162
  loadingText: loadingText,
@@ -1223,7 +1225,7 @@ var ClearButton = function ClearButton(_ref3) {
1223
1225
  className: "eds-dropdown__divider"
1224
1226
  }));
1225
1227
  };
1226
- var Appendix$1 = function Appendix(_ref4) {
1228
+ var Appendix = function Appendix(_ref4) {
1227
1229
  var loading = _ref4.loading,
1228
1230
  loadingText = _ref4.loadingText,
1229
1231
  readOnly = _ref4.readOnly,
@@ -1273,46 +1275,93 @@ function SelectedItemsLabel(items) {
1273
1275
  }).toString() : items.length + " elementer valgt";
1274
1276
  }
1275
1277
 
1276
- var _excluded$1 = ["selectedItem", "isOpen", "getMenuProps", "getItemProps", "filteredItems", "highlightedIndex", "listStyle"];
1278
+ var _excluded$4 = ["selectedItems", "listItems", "inputValue", "isOpen", "getMenuProps", "getItemProps", "highlightedIndex", "showSelectAllInList", "loading", "selectAllCheckboxState", "selectAllItem", "listStyle", "noMatchesText", "loadingText", "selectedItemAriaLabel"];
1277
1279
  var DropdownList = function DropdownList(_ref) {
1278
- var selectedItem = _ref.selectedItem,
1280
+ var selectedItems = _ref.selectedItems,
1281
+ listItems = _ref.listItems,
1279
1282
  isOpen = _ref.isOpen,
1280
1283
  getMenuProps = _ref.getMenuProps,
1281
1284
  getItemProps = _ref.getItemProps,
1282
- filteredItems = _ref.filteredItems,
1283
1285
  highlightedIndex = _ref.highlightedIndex,
1286
+ _ref$loading = _ref.loading,
1287
+ loading = _ref$loading === void 0 ? false : _ref$loading,
1288
+ selectAllCheckboxState = _ref.selectAllCheckboxState,
1289
+ selectAllItem = _ref.selectAllItem,
1284
1290
  listStyle = _ref.listStyle,
1285
- rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1286
- return React__default["default"].createElement("ul", _extends({
1287
- className: classNames__default["default"]('eds-searchable-dropdown__list', {
1288
- 'eds-searchable-dropdown__list--open': isOpen
1289
- })
1290
- }, getMenuProps(), {
1291
+ _ref$noMatchesText = _ref.noMatchesText,
1292
+ noMatchesText = _ref$noMatchesText === void 0 ? 'Ingen treff for søket' : _ref$noMatchesText,
1293
+ _ref$loadingText = _ref.loadingText,
1294
+ loadingText = _ref$loadingText === void 0 ? 'Laster inn …' : _ref$loadingText,
1295
+ _ref$selectedItemAria = _ref.selectedItemAriaLabel,
1296
+ selectedItemAriaLabel = _ref$selectedItemAria === void 0 ? ', valgt element' : _ref$selectedItemAria,
1297
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$4);
1298
+ var isMultiselect = selectAllItem !== undefined;
1299
+ var isNoMatches = !loading && (listItems.length === 0 || listItems.length === 1 && listItems[0].value === (selectAllItem == null ? void 0 : selectAllItem.value));
1300
+ var itemIsSelected = function itemIsSelected(item) {
1301
+ return selectedItems.some(function (selectedItem) {
1302
+ return selectedItem.value === item.value;
1303
+ });
1304
+ };
1305
+ var selectAllListItemContent = function selectAllListItemContent() {
1306
+ return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(form.Checkbox, {
1307
+ className: "eds-dropdown__list__item__checkbox",
1308
+ checked: selectAllCheckboxState == null ? void 0 : selectAllCheckboxState(),
1309
+ "aria-hidden": "true",
1310
+ onChange: function onChange() {
1311
+ return;
1312
+ }
1313
+ }), React__default["default"].createElement("span", {
1314
+ className: "eds-dropdown__list__item__text"
1315
+ }, selectAllItem == null ? void 0 : selectAllItem.label));
1316
+ };
1317
+ var listItemContent = function listItemContent(item) {
1318
+ return React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(form.Checkbox, {
1319
+ style: !isMultiselect ? {
1320
+ display: 'none'
1321
+ } : {},
1322
+ className: "eds-dropdown__list__item__checkbox",
1323
+ checked: itemIsSelected(item),
1324
+ "aria-hidden": "true",
1325
+ onChange: function onChange() {
1326
+ return;
1327
+ }
1328
+ }), React__default["default"].createElement("span", {
1329
+ className: "eds-dropdown__list__item__text"
1330
+ }, item.label, React__default["default"].createElement(a11y.VisuallyHidden, null, selectedItemAriaLabel)), item.icons && React__default["default"].createElement("span", null, item.icons.map(function (Icon, index) {
1331
+ return React__default["default"].createElement(Icon, {
1332
+ key: index,
1333
+ inline: true,
1334
+ className: "eds-dropdown__list__item__icon"
1335
+ });
1336
+ })));
1337
+ };
1338
+ return React__default["default"].createElement("ul", _extends({}, getMenuProps(), {
1339
+ className: classNames__default["default"]('eds-dropdown__list', {
1340
+ 'eds-dropdown__list--open': isOpen
1341
+ }),
1291
1342
  style: _extends({}, rest.style, listStyle)
1292
- }), isOpen ? filteredItems.map(function (item, index) {
1293
- return (
1294
- // eslint-disable-next-line react/jsx-key
1295
- React__default["default"].createElement("li", _extends({
1296
- className: classNames__default["default"]('eds-searchable-dropdown__list__item', {
1297
- 'eds-searchable-dropdown__list__item--highlighted': highlightedIndex === index,
1298
- 'eds-searchable-dropdown__list__item--selected': (selectedItem == null ? void 0 : selectedItem.value) === item.value
1299
- })
1300
- }, getItemProps({
1301
- key: "" + index + item.value,
1302
- item: item,
1303
- index: index
1304
- })), React__default["default"].createElement("span", null, item.label), item.icons && React__default["default"].createElement("span", null, item.icons.map(function (Icon, index) {
1305
- return React__default["default"].createElement(Icon, {
1306
- key: index,
1307
- inline: true,
1308
- className: "eds-searchable-dropdown__list__item-icon"
1309
- });
1310
- })), (selectedItem == null ? void 0 : selectedItem.value) === item.value && React__default["default"].createElement(icons.CheckIcon, null))
1311
- );
1312
- }) : null);
1343
+ }), isOpen && listItems.length > 0 && listItems.map(function (item, index) {
1344
+ var itemIsSelectAll = item.value === (selectAllItem == null ? void 0 : selectAllItem.value);
1345
+ if (itemIsSelectAll && listItems.length <= 2) return React__default["default"].createElement(React__default["default"].Fragment, null);
1346
+ return React__default["default"].createElement("li", _extends({
1347
+ key: item.value,
1348
+ className: classNames__default["default"]('eds-dropdown__list__item', {
1349
+ 'eds-dropdown__list__item--select-all': itemIsSelectAll,
1350
+ 'eds-dropdown__list__item--highlighted': highlightedIndex === index,
1351
+ 'eds-dropdown__list__item--selected': !isMultiselect && itemIsSelected(item)
1352
+ })
1353
+ }, getItemProps({
1354
+ key: "" + index + item.value,
1355
+ item: item,
1356
+ index: index
1357
+ })), itemIsSelectAll ? selectAllListItemContent() : listItemContent(item));
1358
+ }), isOpen && isNoMatches && React__default["default"].createElement("li", {
1359
+ className: "eds-dropdown__list__item"
1360
+ }, noMatchesText), isOpen && loading && React__default["default"].createElement("li", {
1361
+ className: "eds-dropdown__list__item"
1362
+ }, loadingText));
1313
1363
  };
1314
1364
 
1315
- var _excluded = ["items", "selectedItem", "onChange", "label", "placeholder", "clearable", "openOnFocus", "readonly", "feedback", "variant", "className", "listStyle"];
1316
1365
  function lowerCaseFilterTest(item, input) {
1317
1366
  if (!input) {
1318
1367
  return true;
@@ -1321,69 +1370,279 @@ function lowerCaseFilterTest(item, input) {
1321
1370
  var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
1322
1371
  return inputRegex.test(item.label);
1323
1372
  }
1373
+ var itemToString = function itemToString(item) {
1374
+ return item ? item.label : '';
1375
+ };
1376
+ var useMultiselectUtils = function useMultiselectUtils(_ref) {
1377
+ var listItems = _ref.listItems,
1378
+ selectedItems = _ref.selectedItems,
1379
+ selectAllValue = _ref.selectAllValue;
1380
+ var hasSelectedItems = selectedItems.length > 0;
1381
+ var listItemsWithoutSelectAll = listItems.filter(function (item) {
1382
+ return item.value !== selectAllValue;
1383
+ });
1384
+ var allListItemsAreSelected = listItemsWithoutSelectAll.filter(function (item) {
1385
+ return !selectedItems.includes(item);
1386
+ }).length === 0;
1387
+ var someListItemsAreSelected = listItemsWithoutSelectAll.some(function (item) {
1388
+ return selectedItems.includes(item);
1389
+ });
1390
+ var addClickedItemToSelectedItems = function addClickedItemToSelectedItems(clickedItem, onChange) {
1391
+ return onChange([].concat(selectedItems, [clickedItem]));
1392
+ };
1393
+ var clickedItemIsInSelectedItems = function clickedItemIsInSelectedItems(clickedItem) {
1394
+ return selectedItems.some(function (selectedItem) {
1395
+ return selectedItem.value === clickedItem.value;
1396
+ });
1397
+ };
1398
+ var clickedItemIsSelectAll = function clickedItemIsSelectAll(clickedItem) {
1399
+ return clickedItem.value === selectAllValue;
1400
+ };
1401
+ var removeClickedItemFromSelectedItems = function removeClickedItemFromSelectedItems(clickedItem, onChange) {
1402
+ return onChange(selectedItems.filter(function (selectedItem) {
1403
+ return selectedItem.value !== clickedItem.value;
1404
+ }));
1405
+ };
1406
+ var selectAllCheckboxState = function selectAllCheckboxState() {
1407
+ if (allListItemsAreSelected) return true;
1408
+ if (someListItemsAreSelected) return 'indeterminate';
1409
+ return false;
1410
+ };
1411
+ var selectAllUnselectedItemsInListItems = function selectAllUnselectedItemsInListItems(onChange) {
1412
+ onChange([].concat(selectedItems, listItemsWithoutSelectAll.filter(function (item) {
1413
+ return !selectedItems.includes(item);
1414
+ })));
1415
+ };
1416
+ var unselectAllListItems = function unselectAllListItems(onChange) {
1417
+ onChange(selectedItems.filter(function (item) {
1418
+ return !listItemsWithoutSelectAll.includes(item);
1419
+ }));
1420
+ };
1421
+ return {
1422
+ addClickedItemToSelectedItems: addClickedItemToSelectedItems,
1423
+ allListItemsAreSelected: allListItemsAreSelected,
1424
+ clickedItemIsInSelectedItems: clickedItemIsInSelectedItems,
1425
+ clickedItemIsSelectAll: clickedItemIsSelectAll,
1426
+ hasSelectedItems: hasSelectedItems,
1427
+ listItemsWithoutSelectAll: listItemsWithoutSelectAll,
1428
+ removeClickedItemFromSelectedItems: removeClickedItemFromSelectedItems,
1429
+ selectAllCheckboxState: selectAllCheckboxState,
1430
+ selectAllUnselectedItemsInListItems: selectAllUnselectedItemsInListItems,
1431
+ someListItemsAreSelected: someListItemsAreSelected,
1432
+ unselectAllListItems: unselectAllListItems
1433
+ };
1434
+ };
1435
+
1436
+ var _excluded$3 = ["tabIndex"];
1437
+ var SelectedElementsTag = function SelectedElementsTag(_ref) {
1438
+ var getSelectedItemProps = _ref.getSelectedItemProps,
1439
+ removeSelectedItem = _ref.removeSelectedItem,
1440
+ selectedItem = _ref.selectedItem,
1441
+ index = _ref.index,
1442
+ ariaLabelRemoveSelected = _ref.ariaLabelRemoveSelected;
1443
+ var _getSelectedItemProps = getSelectedItemProps({
1444
+ selectedItem: selectedItem,
1445
+ index: index
1446
+ }),
1447
+ selectedItemProps = _objectWithoutPropertiesLoose(_getSelectedItemProps, _excluded$3);
1448
+ return React__default["default"].createElement(chip.TagChip, _extends({
1449
+ className: classNames__default["default"]('eds-dropdown__selected-element-tag')
1450
+ }, selectedItemProps, {
1451
+ onClose: function onClose(e) {
1452
+ e.stopPropagation();
1453
+ removeSelectedItem(selectedItem);
1454
+ },
1455
+ closeButtonAriaLabel: selectedItem.label + ", " + ariaLabelRemoveSelected + " ",
1456
+ key: selectedItem.value
1457
+ }), React__default["default"].createElement("span", {
1458
+ "aria-hidden": "true"
1459
+ }, selectedItem.label));
1460
+ };
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;
1476
+ if (loading) {
1477
+ return React__default["default"].createElement(DropdownLoadingDots, null, loadingText);
1478
+ }
1479
+ if (readOnly) {
1480
+ return null;
1481
+ }
1482
+ return React__default["default"].createElement("div", {
1483
+ className: "eds-dropdown-appendix"
1484
+ }, clearable && (selectedItems == null ? void 0 : selectedItems.length) > 0 && selectedItems[0] !== null && React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(ClearableButton, {
1485
+ onClear: onClear,
1486
+ focusable: focusable,
1487
+ clearSelectedItemsLabel: clearSelectedItemsLabel,
1488
+ ariaLabelClearItems: ariaLabelClearItems
1489
+ }), React__default["default"].createElement("div", {
1490
+ className: "eds-dropdown-appendix__divider"
1491
+ })), React__default["default"].createElement(ToggleButton, {
1492
+ getToggleButtonProps: getToggleButtonProps,
1493
+ isOpen: isOpen,
1494
+ focusable: focusable
1495
+ }));
1496
+ };
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;
1505
+ return React__default["default"].createElement(tooltip.Tooltip, {
1506
+ "aria-hidden": "true",
1507
+ placement: "right",
1508
+ content: clearSelectedItemsLabel
1509
+ }, React__default["default"].createElement(button.IconButton, {
1510
+ className: "eds-dropdown-appendix__clear-button",
1511
+ type: "button",
1512
+ tabIndex: focusable ? 0 : 1,
1513
+ onClick: onClear,
1514
+ "aria-label": ariaLabelClearItems
1515
+ }, React__default["default"].createElement(icons.CloseSmallIcon, {
1516
+ "aria-hidden": "true"
1517
+ })));
1518
+ };
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;
1528
+ return React__default["default"].createElement(button.IconButton, _extends({}, getToggleButtonProps({
1529
+ className: classNames__default["default"]('eds-dropdown-appendix__toggle-button', {
1530
+ 'eds-dropdown-appendix__toggle-button--open': isOpen
1531
+ })
1532
+ }), {
1533
+ "aria-label": isOpen ? closeAriaLabel : openAriaLabel,
1534
+ tabIndex: focusable ? 0 : 1,
1535
+ type: "button"
1536
+ }), React__default["default"].createElement(icons.DownArrowIcon, {
1537
+ "aria-hidden": "true"
1538
+ }));
1539
+ };
1540
+
1541
+ var _excluded$2 = ["className", "clearable", "debounceTimeout", "disableLabelAnimation", "feedback", "itemFilter", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectedItem", "selectOnBlur", "variant"];
1324
1542
  // TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release
1325
1543
  // TODO Husk å generelt legge inn støtte for typeof value === string
1326
1544
  var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1327
1545
  var _selectedItem$label;
1328
- var items = _ref.items,
1329
- value = _ref.selectedItem,
1330
- onChange = _ref.onChange,
1331
- label = _ref.label,
1332
- placeholder = _ref.placeholder,
1546
+ var className = _ref.className,
1333
1547
  _ref$clearable = _ref.clearable,
1334
1548
  clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1549
+ debounceTimeout = _ref.debounceTimeout,
1550
+ _ref$disableLabelAnim = _ref.disableLabelAnimation,
1551
+ disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
1552
+ feedback = _ref.feedback,
1553
+ _ref$itemFilter = _ref.itemFilter,
1554
+ itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
1555
+ initialItems = _ref.items,
1556
+ label = _ref.label,
1557
+ listStyle = _ref.listStyle,
1558
+ onChange = _ref.onChange,
1335
1559
  _ref$openOnFocus = _ref.openOnFocus,
1336
1560
  openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1561
+ placeholder = _ref.placeholder,
1337
1562
  _ref$readonly = _ref.readonly,
1338
1563
  readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1339
- feedback = _ref.feedback,
1564
+ value = _ref.selectedItem,
1565
+ _ref$selectOnBlur = _ref.selectOnBlur,
1566
+ selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1340
1567
  _ref$variant = _ref.variant,
1341
1568
  variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1342
- className = _ref.className,
1343
- listStyle = _ref.listStyle,
1344
- rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1345
- var _React$useState = React__default["default"].useState(items),
1346
- filteredItems = _React$useState[0],
1347
- setFilteredItems = _React$useState[1];
1569
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1348
1570
  var _useState = React.useState(false),
1349
1571
  hideSelectedItem = _useState[0],
1350
1572
  setHideSelectedItem = _useState[1];
1351
1573
  var inputRef = React.useRef(null);
1352
- var stateReducer = React__default["default"].useCallback(function (_, actionAndChanges) {
1353
- var type = actionAndChanges.type,
1354
- changes = actionAndChanges.changes;
1574
+ var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1575
+ normalizedItems = _useResolvedItems.items,
1576
+ loading = _useResolvedItems.loading,
1577
+ fetchItems = _useResolvedItems.fetchItems;
1578
+ var _React$useState = React__default["default"].useState(normalizedItems),
1579
+ listItems = _React$useState[0],
1580
+ setListItems = _React$useState[1];
1581
+ var filterListItems = function filterListItems(_ref2) {
1582
+ var inputValue = _ref2.inputValue;
1583
+ return setListItems(normalizedItems.filter(function (item) {
1584
+ return itemFilter(item, inputValue);
1585
+ }));
1586
+ };
1587
+ React__default["default"].useEffect(function () {
1588
+ filterListItems({
1589
+ inputValue: inputValue
1590
+ });
1591
+ }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
1592
+ var stateReducer = React__default["default"].useCallback(function (_, _ref3) {
1593
+ var type = _ref3.type,
1594
+ changes = _ref3.changes;
1355
1595
  switch (type) {
1356
1596
  case Downshift.useCombobox.stateChangeTypes.ItemClick:
1357
1597
  case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1358
1598
  case Downshift.useCombobox.stateChangeTypes.InputBlur:
1359
1599
  case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1360
- return _extends({}, changes, changes.selectedItem && {
1361
- inputValue: ''
1362
- });
1600
+ {
1601
+ filterListItems({
1602
+ inputValue: ''
1603
+ });
1604
+ return _extends({}, changes, {
1605
+ inputValue: '' // reset input value to show placeholder on focus
1606
+ });
1607
+ }
1608
+
1609
+ case Downshift.useCombobox.stateChangeTypes.InputChange:
1610
+ {
1611
+ var _changes$inputValue;
1612
+ var leadingWhitespaceTest = /^\s+/g;
1613
+ if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(leadingWhitespaceTest)) setInputValue(changes.inputValue.replace(leadingWhitespaceTest, ''));else {
1614
+ var _changes$inputValue2, _changes$inputValue3;
1615
+ fetchItems((_changes$inputValue2 = changes.inputValue) != null ? _changes$inputValue2 : '');
1616
+ filterListItems({
1617
+ inputValue: (_changes$inputValue3 = changes.inputValue) != null ? _changes$inputValue3 : ''
1618
+ });
1619
+ }
1620
+ return changes;
1621
+ }
1363
1622
  default:
1364
1623
  return changes;
1365
1624
  }
1366
- }, []);
1625
+ }, [fetchItems, filterListItems]);
1367
1626
  var _useCombobox = Downshift.useCombobox(_extends({
1368
- onInputValueChange: function onInputValueChange(_ref2) {
1369
- var inputValue = _ref2.inputValue;
1370
- setFilteredItems(items.filter(function (item) {
1371
- return lowerCaseFilterTest(item, inputValue);
1372
- }));
1373
- },
1374
- items: filteredItems,
1375
- itemToString: function itemToString(item) {
1376
- if (item) return item.value;
1377
- return '';
1378
- },
1379
- stateReducer: stateReducer,
1627
+ items: listItems,
1380
1628
  selectedItem: value,
1381
- onSelectedItemChange: function onSelectedItemChange(_ref3) {
1382
- var newSelectedItem = _ref3.selectedItem;
1383
- return onChange(newSelectedItem != null ? newSelectedItem : null);
1629
+ itemToString: itemToString,
1630
+ stateReducer: stateReducer,
1631
+ onStateChange: function onStateChange(_ref4) {
1632
+ var type = _ref4.type,
1633
+ clickedItem = _ref4.selectedItem;
1634
+ switch (type) {
1635
+ // @ts-expect-error This falltrough is wanted
1636
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1637
+ if (!selectOnBlur) break;
1638
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
1639
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1640
+ onChange(clickedItem != null ? clickedItem : null);
1641
+ }
1384
1642
  }
1385
1643
  }, rest)),
1386
1644
  isOpen = _useCombobox.isOpen,
1645
+ openMenu = _useCombobox.openMenu,
1387
1646
  getToggleButtonProps = _useCombobox.getToggleButtonProps,
1388
1647
  getLabelProps = _useCombobox.getLabelProps,
1389
1648
  getMenuProps = _useCombobox.getMenuProps,
@@ -1392,39 +1651,46 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1392
1651
  highlightedIndex = _useCombobox.highlightedIndex,
1393
1652
  getItemProps = _useCombobox.getItemProps,
1394
1653
  selectedItem = _useCombobox.selectedItem,
1395
- openMenu = _useCombobox.openMenu,
1396
- inputValue = _useCombobox.inputValue;
1654
+ inputValue = _useCombobox.inputValue,
1655
+ setInputValue = _useCombobox.setInputValue;
1397
1656
  return React__default["default"].createElement("div", {
1398
- className: "eds-searchable-dropdown__wrapper"
1657
+ className: "eds-dropdown__wrapper"
1399
1658
  }, React__default["default"].createElement(form.BaseFormControl, _extends({
1400
- append: React__default["default"].createElement(Appendix, {
1401
- selectedItem: selectedItem,
1659
+ append: React__default["default"].createElement(FieldAppend, {
1660
+ selectedItems: [selectedItem],
1402
1661
  isOpen: isOpen,
1403
1662
  clearable: clearable,
1404
1663
  loading: false,
1405
1664
  loadingText: '',
1406
1665
  readOnly: readonly,
1407
- onChange: onChange,
1666
+ onClear: function onClear() {
1667
+ var _inputRef$current;
1668
+ onChange(null);
1669
+ setInputValue('');
1670
+ (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
1671
+ if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : '');
1672
+ },
1408
1673
  getToggleButtonProps: getToggleButtonProps
1409
1674
  }),
1410
- className: classNames__default["default"]('eds-searchable-dropdown', className),
1675
+ disableLabelAnimation: disableLabelAnimation,
1676
+ className: classNames__default["default"]('eds-dropdown', className),
1411
1677
  label: label,
1412
- isFilled: selectedItem ? true : false,
1678
+ isFilled: selectedItem || inputValue !== '',
1413
1679
  feedback: feedback,
1414
1680
  variant: variant,
1415
1681
  readOnly: readonly,
1416
1682
  labelProps: getLabelProps()
1417
1683
  }, getComboboxProps(), rest), !hideSelectedItem && selectedItem && !inputValue && React__default["default"].createElement("span", {
1418
- className: "eds-searchable-dropdown__selected-item__wrapper"
1684
+ className: "eds-dropdown__selected-item__wrapper"
1419
1685
  }, React__default["default"].createElement("span", {
1420
- className: "eds-searchable-dropdown__selected-item",
1686
+ className: "eds-dropdown__selected-item",
1421
1687
  onClick: function onClick() {
1422
- var _inputRef$current;
1423
- return (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
1688
+ var _inputRef$current2;
1689
+ return (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.focus();
1424
1690
  }
1425
1691
  }, selectedItem.label)), React__default["default"].createElement("input", _extends({
1426
1692
  placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder,
1427
- className: "eds-searchable-dropdown__input eds-form-control"
1693
+ className: "eds-dropdown__input eds-form-control"
1428
1694
  }, getInputProps({
1429
1695
  onFocus: function onFocus() {
1430
1696
  if (!isOpen && openOnFocus) openMenu();
@@ -1435,57 +1701,345 @@ var SearchableDropdownBeta = function SearchableDropdownBeta(_ref) {
1435
1701
  },
1436
1702
  ref: inputRef
1437
1703
  })))), React__default["default"].createElement(DropdownList, {
1438
- selectedItem: selectedItem,
1704
+ selectedItems: selectedItem !== null ? [selectedItem] : [],
1439
1705
  isOpen: isOpen,
1440
- filteredItems: filteredItems,
1706
+ listItems: listItems,
1441
1707
  highlightedIndex: highlightedIndex,
1442
1708
  listStyle: listStyle,
1443
1709
  getMenuProps: getMenuProps,
1444
- getItemProps: getItemProps
1710
+ getItemProps: getItemProps,
1711
+ loading: loading
1445
1712
  }));
1446
1713
  };
1447
- var Appendix = function Appendix(_ref4) {
1448
- var clearable = _ref4.clearable,
1449
- readOnly = _ref4.readOnly,
1450
- getToggleButtonProps = _ref4.getToggleButtonProps,
1451
- selectedItem = _ref4.selectedItem,
1452
- isOpen = _ref4.isOpen,
1453
- onChange = _ref4.onChange;
1454
- // TODO implement loading / async
1455
- // if (loading) {
1456
- // return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;
1457
- // }
1458
- if (readOnly) {
1459
- return null;
1460
- }
1461
- return React__default["default"].createElement("div", {
1462
- style: {
1463
- display: 'flex',
1464
- alignItems: 'center'
1714
+
1715
+ var _excluded$1 = ["ariaLabelRemoveSelected", "className", "clearable", "debounceTimeout", "feedback", "hideSelectAll", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectAllLabel", "selectedItems", "selectOnBlur", "style", "variant"];
1716
+ var MultiSelectBeta = function MultiSelectBeta(_ref) {
1717
+ var _ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
1718
+ ariaLabelRemoveSelected = _ref$ariaLabelRemoveS === void 0 ? 'trykk for å fjerne valg' : _ref$ariaLabelRemoveS,
1719
+ className = _ref.className,
1720
+ _ref$clearable = _ref.clearable,
1721
+ clearable = _ref$clearable === void 0 ? false : _ref$clearable,
1722
+ feedback = _ref.feedback,
1723
+ _ref$hideSelectAll = _ref.hideSelectAll,
1724
+ hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
1725
+ initialItems = _ref.items,
1726
+ label = _ref.label,
1727
+ listStyle = _ref.listStyle,
1728
+ onChange = _ref.onChange,
1729
+ _ref$openOnFocus = _ref.openOnFocus,
1730
+ openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
1731
+ placeholder = _ref.placeholder,
1732
+ _ref$readonly = _ref.readonly,
1733
+ readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1734
+ _ref$selectAllLabel = _ref.selectAllLabel,
1735
+ selectAllLabel = _ref$selectAllLabel === void 0 ? 'Velg alle' : _ref$selectAllLabel,
1736
+ selectedItems = _ref.selectedItems,
1737
+ _ref$selectOnBlur = _ref.selectOnBlur,
1738
+ selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1739
+ style = _ref.style,
1740
+ _ref$variant = _ref.variant,
1741
+ variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1742
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1743
+ var _React$useState = React__default["default"].useState(0),
1744
+ lastHighlightedIndex = _React$useState[0],
1745
+ setLastHighlightedIndex = _React$useState[1];
1746
+ var inputRef = React.useRef(null);
1747
+ var _useResolvedItems = useResolvedItems(initialItems),
1748
+ normalizedItems = _useResolvedItems.items,
1749
+ loading = _useResolvedItems.loading,
1750
+ fetchItems = _useResolvedItems.fetchItems;
1751
+ var selectAll = {
1752
+ value: utils.useRandomId('select-all'),
1753
+ label: selectAllLabel
1754
+ };
1755
+ var _useState = React.useState([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems)),
1756
+ listItems = _useState[0],
1757
+ setListItems = _useState[1];
1758
+ var filterListItems = function filterListItems(_ref2) {
1759
+ var inputValue = _ref2.inputValue;
1760
+ return setListItems([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems.filter(function (item) {
1761
+ return lowerCaseFilterTest(item, inputValue);
1762
+ })));
1763
+ };
1764
+ React__default["default"].useEffect(function () {
1765
+ filterListItems({
1766
+ inputValue: inputValue
1767
+ });
1768
+ }, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
1769
+ var _useMultiselectUtils = useMultiselectUtils({
1770
+ listItems: listItems,
1771
+ selectAllValue: selectAll.value,
1772
+ selectedItems: selectedItems
1773
+ }),
1774
+ addClickedItemToSelectedItems = _useMultiselectUtils.addClickedItemToSelectedItems,
1775
+ allListItemsAreSelected = _useMultiselectUtils.allListItemsAreSelected,
1776
+ clickedItemIsInSelectedItems = _useMultiselectUtils.clickedItemIsInSelectedItems,
1777
+ clickedItemIsSelectAll = _useMultiselectUtils.clickedItemIsSelectAll,
1778
+ hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
1779
+ removeClickedItemFromSelectedItems = _useMultiselectUtils.removeClickedItemFromSelectedItems,
1780
+ selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState,
1781
+ selectAllUnselectedItemsInListItems = _useMultiselectUtils.selectAllUnselectedItemsInListItems,
1782
+ unselectAllListItems = _useMultiselectUtils.unselectAllListItems;
1783
+ var _useMultipleSelection = Downshift.useMultipleSelection({
1784
+ selectedItems: selectedItems,
1785
+ itemToString: itemToString,
1786
+ onSelectedItemsChange: function onSelectedItemsChange(changes) {
1787
+ var _changes$selectedItem;
1788
+ onChange((_changes$selectedItem = changes.selectedItems) != null ? _changes$selectedItem : []);
1789
+ }
1790
+ }),
1791
+ getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
1792
+ getDropdownProps = _useMultipleSelection.getDropdownProps,
1793
+ removeSelectedItem = _useMultipleSelection.removeSelectedItem;
1794
+ 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;
1796
+ var changes = _ref3.changes,
1797
+ type = _ref3.type;
1798
+ if (changes != null && changes.highlightedIndex && (changes == null ? void 0 : changes.highlightedIndex) >= 0) setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
1799
+ switch (type) {
1800
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
1801
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1802
+ return _extends({}, changes, {
1803
+ 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
1805
+ });
1806
+
1807
+ case Downshift.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
1808
+ 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
1810
+ });
1811
+
1812
+ case Downshift.useCombobox.stateChangeTypes.InputChange:
1813
+ if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(/^\s+/g)) {
1814
+ var _changes$inputValue$r;
1815
+ // remove leading whitespace if it exists
1816
+ return _extends({}, changes, {
1817
+ inputValue: (_changes$inputValue$r = changes.inputValue.replace(/^\s+/g, '')) != null ? _changes$inputValue$r : ''
1818
+ });
1819
+ }
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
+ });
1824
+ return changes;
1825
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1826
+ return _extends({}, changes, {
1827
+ inputValue: ''
1828
+ });
1829
+ default:
1830
+ return changes;
1465
1831
  }
1466
- }, clearable && selectedItem && React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(button.IconButton, {
1467
- className: "eds-searchable-dropdown-appendix__clear-button",
1468
- type: "button",
1469
- tabIndex: -1,
1470
- onClick: function onClick() {
1471
- return onChange(null);
1832
+ }, [hideSelectAll, normalizedItems, filterListItems, initialItems]);
1833
+ var _useCombobox = Downshift.useCombobox(_extends({
1834
+ defaultHighlightedIndex: lastHighlightedIndex,
1835
+ items: listItems,
1836
+ itemToString: itemToString,
1837
+ selectedItem: null,
1838
+ stateReducer: stateReducer,
1839
+ onStateChange: function onStateChange(_ref4) {
1840
+ var type = _ref4.type,
1841
+ clickedItem = _ref4.selectedItem;
1842
+ // clickedItem means item chosen either via mouse or keyboard
1843
+ if (!clickedItem) return;
1844
+ switch (type) {
1845
+ // @ts-expect-error This falltrough is wanted
1846
+ case Downshift.useCombobox.stateChangeTypes.InputBlur:
1847
+ if (!selectOnBlur) break;
1848
+ case Downshift.useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
1849
+ case Downshift.useCombobox.stateChangeTypes.ItemClick:
1850
+ if (clickedItemIsSelectAll(clickedItem)) {
1851
+ if (allListItemsAreSelected) {
1852
+ return unselectAllListItems(onChange);
1853
+ }
1854
+ return selectAllUnselectedItemsInListItems(onChange);
1855
+ }
1856
+ if (clickedItemIsInSelectedItems(clickedItem)) {
1857
+ return removeClickedItemFromSelectedItems(clickedItem, onChange);
1858
+ }
1859
+ addClickedItemToSelectedItems(clickedItem, onChange);
1860
+ }
1861
+ }
1862
+ }, rest)),
1863
+ getComboboxProps = _useCombobox.getComboboxProps,
1864
+ getInputProps = _useCombobox.getInputProps,
1865
+ getItemProps = _useCombobox.getItemProps,
1866
+ getLabelProps = _useCombobox.getLabelProps,
1867
+ getMenuProps = _useCombobox.getMenuProps,
1868
+ getToggleButtonProps = _useCombobox.getToggleButtonProps,
1869
+ highlightedIndex = _useCombobox.highlightedIndex,
1870
+ inputValue = _useCombobox.inputValue,
1871
+ isOpen = _useCombobox.isOpen,
1872
+ openMenu = _useCombobox.openMenu,
1873
+ setInputValue = _useCombobox.setInputValue;
1874
+ // role=combobox leads to strange VoiceOver behavior and is therefor omitted
1875
+ // const { role: _, ...comboboxProps } = getComboboxProps();
1876
+ var _getComboboxProps = getComboboxProps(),
1877
+ comboboxProps = _extends({}, (_objectDestructuringEmpty(_getComboboxProps), _getComboboxProps));
1878
+ return React__default["default"].createElement("div", {
1879
+ className: "eds-dropdown__wrapper"
1880
+ }, React__default["default"].createElement(form.BaseFormControl, _extends({
1881
+ append: React__default["default"].createElement(FieldAppend, {
1882
+ selectedItems: selectedItems,
1883
+ isOpen: isOpen,
1884
+ clearable: clearable,
1885
+ loading: loading,
1886
+ loadingText: '',
1887
+ 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
+ },
1895
+ getToggleButtonProps: getToggleButtonProps
1896
+ }),
1897
+ className: classNames__default["default"]('eds-dropdown', className),
1898
+ label: label,
1899
+ isFilled: hasSelectedItems || inputValue !== '',
1900
+ feedback: feedback,
1901
+ variant: variant,
1902
+ readOnly: readonly,
1903
+ style: style,
1904
+ labelProps: _extends({
1905
+ 'aria-label': label + ", multiselect, " + selectedItems.length + " valgte elementer"
1906
+ }, getLabelProps())
1907
+ }, comboboxProps, rest), React__default["default"].createElement("div", {
1908
+ className: classNames__default["default"]('eds-dropdown__selected-items-and-input', {
1909
+ 'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
1910
+ }),
1911
+ onClick: function onClick(e) {
1912
+ var _inputRef$current4;
1913
+ if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
1472
1914
  }
1473
- }, React__default["default"].createElement(icons.CloseSmallIcon, null)), React__default["default"].createElement("div", {
1474
- className: "eds-searchable-dropdown-appendix__divider"
1475
- })), React__default["default"].createElement(button.IconButton, _extends({}, getToggleButtonProps({
1476
- className: classNames__default["default"]('eds-searchable-dropdown-appendix__toggle-button', {
1477
- 'eds-searchable-dropdown-appendix__toggle-button--open': isOpen
1478
- })
1479
- }), {
1480
- tabIndex: -1,
1481
- type: "button"
1482
- }), React__default["default"].createElement(icons.DownArrowIcon, null)));
1915
+ }, selectedItems.map(function (selectedItem, index) {
1916
+ return React__default["default"].createElement(SelectedElementsTag, {
1917
+ index: index,
1918
+ key: selectedItem.value,
1919
+ getSelectedItemProps: getSelectedItemProps,
1920
+ selectedItem: selectedItem,
1921
+ removeSelectedItem: removeSelectedItem,
1922
+ ariaLabelRemoveSelected: ariaLabelRemoveSelected
1923
+ });
1924
+ }), React__default["default"].createElement("input", _extends({
1925
+ placeholder: placeholder,
1926
+ className: "eds-dropdown__input eds-form-control",
1927
+ role: "combobox" // eslint-disable-line jsx-a11y/role-has-required-aria-props
1928
+ }, getInputProps(getDropdownProps({
1929
+ preventKeyAction: isOpen,
1930
+ onFocus: function onFocus() {
1931
+ if (!isOpen && openOnFocus) openMenu();
1932
+ },
1933
+ ref: inputRef,
1934
+ value: inputValue != null ? inputValue : ''
1935
+ })))))), React__default["default"].createElement(DropdownList, {
1936
+ listItems: listItems,
1937
+ selectedItems: selectedItems,
1938
+ inputValue: inputValue,
1939
+ isOpen: isOpen,
1940
+ highlightedIndex: highlightedIndex,
1941
+ getMenuProps: getMenuProps,
1942
+ getItemProps: getItemProps,
1943
+ selectAllItem: selectAll,
1944
+ selectAllCheckboxState: selectAllCheckboxState,
1945
+ listStyle: listStyle,
1946
+ loading: loading
1947
+ }));
1948
+ };
1949
+
1950
+ var _excluded = ["className", "clearable", "debounceTimeout", "feedback", "items", "label", "listStyle", "onChange", "openOnFocus", "placeholder", "readonly", "selectedItem", "selectOnBlur", "selectOnTab", "variant"];
1951
+ var DropdownBeta = function DropdownBeta(_ref) {
1952
+ var _selectedItem$label;
1953
+ var className = _ref.className,
1954
+ debounceTimeout = _ref.debounceTimeout,
1955
+ feedback = _ref.feedback,
1956
+ initialItems = _ref.items,
1957
+ label = _ref.label,
1958
+ listStyle = _ref.listStyle,
1959
+ onChange = _ref.onChange,
1960
+ _ref$readonly = _ref.readonly,
1961
+ readonly = _ref$readonly === void 0 ? false : _ref$readonly,
1962
+ selectedItem = _ref.selectedItem,
1963
+ _ref$selectOnBlur = _ref.selectOnBlur,
1964
+ selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
1965
+ _ref$variant = _ref.variant,
1966
+ variant = _ref$variant === void 0 ? 'info' : _ref$variant,
1967
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded);
1968
+ var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
1969
+ normalizedItems = _useResolvedItems.items,
1970
+ loading = _useResolvedItems.loading;
1971
+ var _useSelect = Downshift.useSelect({
1972
+ items: normalizedItems,
1973
+ selectedItem: selectedItem,
1974
+ onStateChange: function onStateChange(_ref2) {
1975
+ var type = _ref2.type,
1976
+ clickedItem = _ref2.selectedItem;
1977
+ switch (type) {
1978
+ // @ts-expect-error This falltrough is wanted
1979
+ case Downshift.useSelect.stateChangeTypes.InputBlur:
1980
+ if (!selectOnBlur) break;
1981
+ case Downshift.useSelect.stateChangeTypes.MenuKeyDownEnter: // eslint-disable-line no-fallthrough
1982
+ case Downshift.useSelect.stateChangeTypes.ItemClick:
1983
+ onChange == null ? void 0 : onChange(clickedItem !== undefined ? clickedItem : null);
1984
+ }
1985
+ },
1986
+ itemToString: itemToString
1987
+ }),
1988
+ isOpen = _useSelect.isOpen,
1989
+ getToggleButtonProps = _useSelect.getToggleButtonProps,
1990
+ getLabelProps = _useSelect.getLabelProps,
1991
+ getMenuProps = _useSelect.getMenuProps,
1992
+ highlightedIndex = _useSelect.highlightedIndex,
1993
+ getItemProps = _useSelect.getItemProps;
1994
+ return React__default["default"].createElement("div", {
1995
+ className: "eds-dropdown__wrapper"
1996
+ }, React__default["default"].createElement(form.BaseFormControl, _extends({
1997
+ append: React__default["default"].createElement(FieldAppend, {
1998
+ selectedItems: [selectedItem],
1999
+ isOpen: isOpen,
2000
+ clearable: true,
2001
+ loading: loading,
2002
+ loadingText: '',
2003
+ readOnly: readonly,
2004
+ onClear: function onClear() {
2005
+ onChange == null ? void 0 : onChange(null);
2006
+ },
2007
+ getToggleButtonProps: getToggleButtonProps,
2008
+ clearSelectedItemsLabel: "Fjern valgt",
2009
+ ariaLabelClearItems: (selectedItem == null ? void 0 : selectedItem.label) + " valgt, trykk for \xE5 fjerne valget",
2010
+ focusable: true
2011
+ }),
2012
+ className: classNames__default["default"]('eds-dropdown', className, {
2013
+ 'eds-dropdown--not-filled': selectedItem === null
2014
+ }),
2015
+ label: label,
2016
+ labelId: getLabelProps().id,
2017
+ labelProps: getLabelProps(),
2018
+ disableLabelAnimation: true,
2019
+ isFilled: selectedItem !== null,
2020
+ feedback: feedback,
2021
+ variant: variant,
2022
+ readOnly: readonly
2023
+ }, rest), React__default["default"].createElement("div", _extends({
2024
+ className: "eds-dropdown__selected-item-button"
2025
+ }, getToggleButtonProps()), (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : '')), React__default["default"].createElement(DropdownList, {
2026
+ selectedItems: selectedItem !== null ? [selectedItem] : [],
2027
+ isOpen: isOpen,
2028
+ listItems: normalizedItems,
2029
+ highlightedIndex: highlightedIndex,
2030
+ listStyle: listStyle,
2031
+ getMenuProps: getMenuProps,
2032
+ getItemProps: getItemProps,
2033
+ loading: loading
2034
+ }));
1483
2035
  };
1484
2036
 
1485
2037
  utils.warnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');
1486
2038
 
1487
2039
  exports.Dropdown = Dropdown;
2040
+ exports.DropdownBeta = DropdownBeta;
1488
2041
  exports.MultiSelect = MultiSelect;
2042
+ exports.MultiSelectBeta = MultiSelectBeta;
1489
2043
  exports.NativeDropdown = NativeDropdown;
1490
2044
  exports.SearchableDropdownBeta = SearchableDropdownBeta;
1491
2045
  //# sourceMappingURL=dropdown.cjs.development.js.map