@entur/dropdown 4.0.10 → 5.0.0-RC.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Dropdown.d.ts +37 -36
- package/dist/MultiSelect.d.ts +86 -29
- package/dist/NativeDropdown.d.ts +23 -9
- package/dist/SearchableDropdown.d.ts +62 -16
- package/dist/components/DropdownList.d.ts +25 -0
- package/dist/components/FieldComponents.d.ts +29 -0
- package/dist/{BaseDropdown.d.ts → deprecated/BaseDropdown.d.ts} +3 -3
- package/dist/{DownshiftProvider.d.ts → deprecated/DownshiftProvider.d.ts} +1 -1
- package/dist/deprecated/Dropdown.d.ts +72 -0
- package/dist/{DropdownInputGroup.d.ts → deprecated/DropdownInputGroup.d.ts} +2 -2
- package/dist/deprecated/DropdownList.d.ts +8 -0
- package/dist/{DropdownLoadingDots.d.ts → deprecated/DropdownLoadingDots.d.ts} +1 -1
- package/dist/deprecated/DropdownToggleButton.d.ts +3 -0
- package/dist/deprecated/MultiSelect.d.ts +64 -0
- package/dist/{RegularDropdown.d.ts → deprecated/RegularDropdown.d.ts} +3 -3
- package/dist/deprecated/SearchableDropdown.d.ts +34 -0
- package/dist/deprecated/index.d.ts +2 -0
- package/dist/dropdown.cjs.development.js +1171 -261
- 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 +1171 -263
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/styles.css +308 -142
- package/dist/useNormalizedItems.d.ts +5 -6
- package/dist/utils.d.ts +48 -0
- package/package.json +12 -12
- package/dist/DropdownList.d.ts +0 -8
- package/dist/DropdownToggleButton.d.ts +0 -3
- package/dist/beta/DropdownList.d.ts +0 -17
- package/dist/beta/SearchableDropdown.d.ts +0 -42
- package/dist/beta/index.d.ts +0 -1
package/dist/dropdown.esm.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { mergeRefs, debounce, useRandomId, warnAboutMissingStyles } from '@entur/utils';
|
|
2
2
|
import React, { useState, useRef } from 'react';
|
|
3
|
-
import Downshift, { useSelect, useCombobox } from 'downshift';
|
|
3
|
+
import Downshift, { useSelect, useCombobox, useMultipleSelection } from 'downshift';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
|
-
import { BaseFormControl, VariantProvider, FeedbackText } from '@entur/form';
|
|
5
|
+
import { BaseFormControl, VariantProvider, FeedbackText, Checkbox } from '@entur/form';
|
|
6
6
|
import { CheckIcon, DownArrowIcon, CloseSmallIcon, CloseIcon } from '@entur/icons';
|
|
7
7
|
import { VisuallyHidden } from '@entur/a11y';
|
|
8
8
|
import { LoadingDots } from '@entur/loader';
|
|
9
9
|
import { space } from '@entur/tokens';
|
|
10
10
|
import { IconButton } from '@entur/button';
|
|
11
|
+
import { TagChip } from '@entur/chip';
|
|
12
|
+
import { Tooltip } from '@entur/tooltip';
|
|
11
13
|
|
|
12
14
|
function _regeneratorRuntime() {
|
|
13
15
|
_regeneratorRuntime = function () {
|
|
@@ -370,7 +372,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
370
372
|
return target;
|
|
371
373
|
}
|
|
372
374
|
|
|
373
|
-
var _excluded$
|
|
375
|
+
var _excluded$d = ["children", "onChange", "onInputValueChange", "highlightFirstItemOnOpen", "className", "style", "searchable"];
|
|
374
376
|
var DownshiftContext = /*#__PURE__*/React.createContext(null);
|
|
375
377
|
var DownshiftProvider = function DownshiftProvider(_ref) {
|
|
376
378
|
var children = _ref.children,
|
|
@@ -388,7 +390,7 @@ var DownshiftProvider = function DownshiftProvider(_ref) {
|
|
|
388
390
|
style = _ref.style,
|
|
389
391
|
_ref$searchable = _ref.searchable,
|
|
390
392
|
searchable = _ref$searchable === void 0 ? false : _ref$searchable,
|
|
391
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
393
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$d);
|
|
392
394
|
var handleStateChange = function handleStateChange(changes, stateAndHelpers) {
|
|
393
395
|
if (changes.type === Downshift.stateChangeTypes.controlledPropUpdatedSelectedItem) {
|
|
394
396
|
return;
|
|
@@ -448,10 +450,10 @@ var useDownshift = function useDownshift() {
|
|
|
448
450
|
return context;
|
|
449
451
|
};
|
|
450
452
|
|
|
451
|
-
var _excluded$
|
|
452
|
-
var
|
|
453
|
+
var _excluded$c = ["items"];
|
|
454
|
+
var DropdownListDeprecated = function DropdownListDeprecated(_ref) {
|
|
453
455
|
var items = _ref.items,
|
|
454
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
456
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$c);
|
|
455
457
|
var _useDownshift = useDownshift(),
|
|
456
458
|
highlightedIndex = _useDownshift.highlightedIndex,
|
|
457
459
|
isOpen = _useDownshift.isOpen,
|
|
@@ -485,7 +487,7 @@ var DropdownList$1 = function DropdownList(_ref) {
|
|
|
485
487
|
}) : null);
|
|
486
488
|
};
|
|
487
489
|
|
|
488
|
-
var
|
|
490
|
+
var DropdownDeprecatedToggleButton = function DropdownDeprecatedToggleButton() {
|
|
489
491
|
var _useDownshift = useDownshift(),
|
|
490
492
|
getToggleButtonProps = _useDownshift.getToggleButtonProps,
|
|
491
493
|
isOpen = _useDownshift.isOpen;
|
|
@@ -499,18 +501,18 @@ var DropdownToggleButton$1 = function DropdownToggleButton() {
|
|
|
499
501
|
}), React.createElement(DownArrowIcon, null));
|
|
500
502
|
};
|
|
501
503
|
|
|
502
|
-
var _excluded$
|
|
503
|
-
var
|
|
504
|
+
var _excluded$b = ["className", "children"];
|
|
505
|
+
var DropdownDeprecatedLoadingDots = function DropdownDeprecatedLoadingDots(_ref) {
|
|
504
506
|
var className = _ref.className,
|
|
505
507
|
children = _ref.children,
|
|
506
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
508
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
|
|
507
509
|
return React.createElement("div", _extends({
|
|
508
510
|
className: classNames('eds-inline-spinner', className)
|
|
509
511
|
}, rest), React.createElement(LoadingDots, null), React.createElement(VisuallyHidden, null, children));
|
|
510
512
|
};
|
|
511
513
|
|
|
512
|
-
var _excluded$
|
|
513
|
-
var
|
|
514
|
+
var _excluded$a = ["children", "className", "items", "loading", "loadingText", "placeholder", "style", "listStyle", "clearable", "label", "isFilled", "disableLabelAnimation"];
|
|
515
|
+
var BaseDropdownDeprecated = function BaseDropdownDeprecated(_ref) {
|
|
514
516
|
var children = _ref.children,
|
|
515
517
|
className = _ref.className,
|
|
516
518
|
items = _ref.items,
|
|
@@ -525,14 +527,14 @@ var BaseDropdown = function BaseDropdown(_ref) {
|
|
|
525
527
|
_ref$isFilled = _ref.isFilled,
|
|
526
528
|
isFilled = _ref$isFilled === void 0 ? false : _ref$isFilled,
|
|
527
529
|
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
528
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
530
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$a);
|
|
529
531
|
var _useDownshift = useDownshift(),
|
|
530
532
|
getLabelProps = _useDownshift.getLabelProps;
|
|
531
533
|
return React.createElement("div", {
|
|
532
534
|
className: "eds-dropdown-wrapper",
|
|
533
535
|
style: style
|
|
534
536
|
}, React.createElement(BaseFormControl, _extends({
|
|
535
|
-
append: React.createElement(Appendix$
|
|
537
|
+
append: React.createElement(Appendix$1, {
|
|
536
538
|
clearable: clearable,
|
|
537
539
|
loading: loading,
|
|
538
540
|
loadingText: loadingText,
|
|
@@ -543,7 +545,7 @@ var BaseDropdown = function BaseDropdown(_ref) {
|
|
|
543
545
|
isFilled: isFilled,
|
|
544
546
|
labelProps: getLabelProps(),
|
|
545
547
|
disableLabelAnimation: disableLabelAnimation
|
|
546
|
-
}, rest), children), React.createElement(
|
|
548
|
+
}, rest), children), React.createElement(DropdownListDeprecated, _extends({
|
|
547
549
|
items: items,
|
|
548
550
|
style: _extends({
|
|
549
551
|
position: 'absolute',
|
|
@@ -568,22 +570,22 @@ var ClearButton$1 = function ClearButton(_ref2) {
|
|
|
568
570
|
className: "eds-dropdown__divider"
|
|
569
571
|
}));
|
|
570
572
|
};
|
|
571
|
-
var Appendix$
|
|
573
|
+
var Appendix$1 = function Appendix(_ref3) {
|
|
572
574
|
var clearable = _ref3.clearable,
|
|
573
575
|
loading = _ref3.loading,
|
|
574
576
|
loadingText = _ref3.loadingText,
|
|
575
577
|
readOnly = _ref3.readOnly;
|
|
576
578
|
if (loading) {
|
|
577
|
-
return React.createElement(
|
|
579
|
+
return React.createElement(DropdownDeprecatedLoadingDots, null, loadingText);
|
|
578
580
|
}
|
|
579
581
|
if (readOnly) {
|
|
580
582
|
return null;
|
|
581
583
|
}
|
|
582
|
-
return clearable ? React.createElement(React.Fragment, null, React.createElement(ClearButton$1, null), " ", React.createElement(
|
|
584
|
+
return clearable ? React.createElement(React.Fragment, null, React.createElement(ClearButton$1, null), " ", React.createElement(DropdownDeprecatedToggleButton, null)) : React.createElement(DropdownDeprecatedToggleButton, null);
|
|
583
585
|
};
|
|
584
586
|
|
|
585
|
-
var _excluded$
|
|
586
|
-
var
|
|
587
|
+
var _excluded$9 = ["disabled", "placeholder", "selectOnTab", "openOnFocus", "listStyle", "items", "label", "disableLabelAnimation", "loading", "loadingText", "className", "clearable"];
|
|
588
|
+
var RegularDropdownDeprecated = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
587
589
|
var disabled = _ref.disabled,
|
|
588
590
|
_ref$placeholder = _ref.placeholder,
|
|
589
591
|
placeholder = _ref$placeholder === void 0 ? 'Vennligst velg' : _ref$placeholder,
|
|
@@ -599,7 +601,7 @@ var RegularDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
599
601
|
loadingText = _ref.loadingText,
|
|
600
602
|
className = _ref.className,
|
|
601
603
|
clearable = _ref.clearable,
|
|
602
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
604
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$9);
|
|
603
605
|
var _useDownshift = useDownshift(),
|
|
604
606
|
getToggleButtonProps = _useDownshift.getToggleButtonProps,
|
|
605
607
|
selectedItem = _useDownshift.selectedItem,
|
|
@@ -608,7 +610,7 @@ var RegularDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
608
610
|
isOpen = _useDownshift.isOpen,
|
|
609
611
|
highlightedIndex = _useDownshift.highlightedIndex,
|
|
610
612
|
setHighlightedIndex = _useDownshift.setHighlightedIndex;
|
|
611
|
-
return React.createElement(
|
|
613
|
+
return React.createElement(BaseDropdownDeprecated, _extends({
|
|
612
614
|
disabled: disabled,
|
|
613
615
|
listStyle: listStyle,
|
|
614
616
|
items: items,
|
|
@@ -660,7 +662,7 @@ var RegularDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
660
662
|
}), selectedItem ? selectedItem.label : placeholder));
|
|
661
663
|
});
|
|
662
664
|
|
|
663
|
-
var _excluded$
|
|
665
|
+
var _excluded$8 = ["disabled", "className", "items", "loading", "loadingText", "readOnly", "prepend", "selectOnTab", "openOnFocus", "listStyle", "clearable", "itemFilter", "label", "disableLabelAnimation", "placeholder"];
|
|
664
666
|
function LowerCaseFilterTest(item, input) {
|
|
665
667
|
if (!input) {
|
|
666
668
|
return true;
|
|
@@ -669,7 +671,17 @@ function LowerCaseFilterTest(item, input) {
|
|
|
669
671
|
var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
|
|
670
672
|
return inputRegex.test(item.label);
|
|
671
673
|
}
|
|
672
|
-
|
|
674
|
+
/**
|
|
675
|
+
* @deprecated
|
|
676
|
+
* New SearchableDropdown available
|
|
677
|
+
*
|
|
678
|
+
* migration guide to new dropdown:
|
|
679
|
+
* - change import from 'DropdownOld' to 'Dropdown'
|
|
680
|
+
* - change from 'value' to 'selectedItem'
|
|
681
|
+
* + type of 'selectedItem' is 'NormalizedDropdownType' and does not include 'string'
|
|
682
|
+
* - 'onChange' must update value of 'selectedItem'
|
|
683
|
+
*/
|
|
684
|
+
var SearchableDropdownDeprecated = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
673
685
|
var _ref$disabled = _ref.disabled,
|
|
674
686
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
675
687
|
className = _ref.className,
|
|
@@ -692,7 +704,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
692
704
|
label = _ref.label,
|
|
693
705
|
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
694
706
|
placeholder = _ref.placeholder,
|
|
695
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
707
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$8);
|
|
696
708
|
var _useDownshift = useDownshift(),
|
|
697
709
|
getInputProps = _useDownshift.getInputProps,
|
|
698
710
|
inputValue = _useDownshift.inputValue,
|
|
@@ -710,7 +722,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
710
722
|
return itemFilter(item, inputValue);
|
|
711
723
|
});
|
|
712
724
|
}, [inputValue, items, itemFilter]);
|
|
713
|
-
return React.createElement(
|
|
725
|
+
return React.createElement(BaseDropdownDeprecated, {
|
|
714
726
|
items: filteredItems,
|
|
715
727
|
disabled: disabled,
|
|
716
728
|
readOnly: readOnly,
|
|
@@ -752,7 +764,7 @@ var SearchableDropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
752
764
|
})));
|
|
753
765
|
});
|
|
754
766
|
|
|
755
|
-
var
|
|
767
|
+
var DropdownInputGroupDeprecated = function DropdownInputGroupDeprecated(_ref) {
|
|
756
768
|
var children = _ref.children,
|
|
757
769
|
feedback = _ref.feedback,
|
|
758
770
|
variant = _ref.variant,
|
|
@@ -881,7 +893,7 @@ debounceTimeout) {
|
|
|
881
893
|
if (isItemsFunction) {
|
|
882
894
|
fetchItems('');
|
|
883
895
|
}
|
|
884
|
-
}, [isItemsFunction
|
|
896
|
+
}, [isItemsFunction]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
885
897
|
return {
|
|
886
898
|
items: normalizedItems,
|
|
887
899
|
loading: isItemsFunction ? loading : false,
|
|
@@ -889,8 +901,19 @@ debounceTimeout) {
|
|
|
889
901
|
};
|
|
890
902
|
};
|
|
891
903
|
|
|
892
|
-
var _excluded$
|
|
893
|
-
|
|
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"];
|
|
905
|
+
/**
|
|
906
|
+
* @deprecated
|
|
907
|
+
* New Dropdown available
|
|
908
|
+
*
|
|
909
|
+
* migration guide to new dropdown:
|
|
910
|
+
* - change import from 'DropdownOld' to 'Dropdown'
|
|
911
|
+
* + if 'searchable', switch to 'SearchableDropdown'
|
|
912
|
+
* - change from 'value' to 'selectedItem'
|
|
913
|
+
* + type of 'selectedItem' is 'NormalizedDropdownType' and does not include 'string'
|
|
914
|
+
* - 'onChange' must update value of 'selectedItem'
|
|
915
|
+
*/
|
|
916
|
+
var DropdownDeprecated = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
894
917
|
var highlightFirstItemOnOpen = _ref.highlightFirstItemOnOpen,
|
|
895
918
|
debounceTimeout = _ref.debounceTimeout,
|
|
896
919
|
disabled = _ref.disabled,
|
|
@@ -917,7 +940,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
917
940
|
listStyle = _ref.listStyle,
|
|
918
941
|
itemFilter = _ref.itemFilter,
|
|
919
942
|
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
920
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$
|
|
943
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$7);
|
|
921
944
|
var _useResolvedItems = useResolvedItems(items, debounceTimeout),
|
|
922
945
|
normalizedItems = _useResolvedItems.items,
|
|
923
946
|
loading = _useResolvedItems.loading,
|
|
@@ -925,7 +948,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
925
948
|
var selectedItem = value === undefined ? undefined : normalizedItems.find(function (item) {
|
|
926
949
|
return value === item.value;
|
|
927
950
|
}) || null;
|
|
928
|
-
var RenderedDropdown = searchable ?
|
|
951
|
+
var RenderedDropdown = searchable ? SearchableDropdownDeprecated : RegularDropdownDeprecated;
|
|
929
952
|
var searchAbleProps = searchable ? {
|
|
930
953
|
itemFilter: itemFilter,
|
|
931
954
|
name: rest.name,
|
|
@@ -943,7 +966,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
943
966
|
className: className,
|
|
944
967
|
style: style,
|
|
945
968
|
searchable: searchable
|
|
946
|
-
}, rest), React.createElement(
|
|
969
|
+
}, rest), React.createElement(DropdownInputGroupDeprecated, {
|
|
947
970
|
feedback: feedback,
|
|
948
971
|
variant: variant
|
|
949
972
|
}, React.createElement(RenderedDropdown, _extends({
|
|
@@ -964,68 +987,10 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
964
987
|
}, searchAbleProps))));
|
|
965
988
|
});
|
|
966
989
|
|
|
967
|
-
var _excluded$
|
|
968
|
-
var
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
972
|
-
_ref$readOnly = _ref.readOnly,
|
|
973
|
-
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
974
|
-
items = _ref.items,
|
|
975
|
-
loadingText = _ref.loadingText,
|
|
976
|
-
prepend = _ref.prepend,
|
|
977
|
-
style = _ref.style,
|
|
978
|
-
label = _ref.label,
|
|
979
|
-
variant = _ref.variant,
|
|
980
|
-
feedback = _ref.feedback,
|
|
981
|
-
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
982
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
983
|
-
var _useResolvedItems = useResolvedItems(items),
|
|
984
|
-
normalizedItems = _useResolvedItems.items,
|
|
985
|
-
loading = _useResolvedItems.loading;
|
|
986
|
-
var rightSideIcon = React.createElement(DownArrowIcon, {
|
|
987
|
-
inline: true,
|
|
988
|
-
"aria-hidden": "true"
|
|
989
|
-
});
|
|
990
|
-
if (disabled || readOnly) {
|
|
991
|
-
rightSideIcon = null;
|
|
992
|
-
} else if (loading) {
|
|
993
|
-
rightSideIcon = React.createElement(DropdownLoadingDots, {
|
|
994
|
-
"aria-hidden": "true"
|
|
995
|
-
}, loadingText);
|
|
996
|
-
}
|
|
997
|
-
var nativeDropdownId = useRandomId('eds-native-dropdown');
|
|
998
|
-
return React.createElement(BaseFormControl, {
|
|
999
|
-
disabled: disabled,
|
|
1000
|
-
readOnly: readOnly,
|
|
1001
|
-
prepend: prepend,
|
|
1002
|
-
append: rightSideIcon,
|
|
1003
|
-
className: className,
|
|
1004
|
-
style: style,
|
|
1005
|
-
label: label,
|
|
1006
|
-
labelId: nativeDropdownId,
|
|
1007
|
-
variant: variant,
|
|
1008
|
-
feedback: feedback,
|
|
1009
|
-
disableLabelAnimation: disableLabelAnimation,
|
|
1010
|
-
isFilled: true
|
|
1011
|
-
}, React.createElement("select", _extends({
|
|
1012
|
-
"aria-invalid": variant === 'error',
|
|
1013
|
-
"aria-labelledby": nativeDropdownId,
|
|
1014
|
-
"aria-busy": loading,
|
|
1015
|
-
className: "eds-form-control eds-dropdown",
|
|
1016
|
-
disabled: disabled || readOnly
|
|
1017
|
-
}, rest), normalizedItems.map(function (item) {
|
|
1018
|
-
return React.createElement("option", {
|
|
1019
|
-
key: item.value,
|
|
1020
|
-
value: item.value
|
|
1021
|
-
}, item.label);
|
|
1022
|
-
})));
|
|
1023
|
-
};
|
|
1024
|
-
|
|
1025
|
-
var _excluded$2 = ["items", "itemsSelectedLabel", "label", "feedback", "variant", "disabled", "readOnly", "onChange", "className", "clearable", "loading", "loadingText", "openOnFocus", "style", "listStyle", "initialSelectedItems", "debounceTimeout"];
|
|
1026
|
-
var MultiSelectContext = /*#__PURE__*/React.createContext(null);
|
|
1027
|
-
var useMultiSelectContext = function useMultiSelectContext() {
|
|
1028
|
-
var context = React.useContext(MultiSelectContext);
|
|
990
|
+
var _excluded$6 = ["className", "clearable", "debounceTimeout", "disabled", "feedback", "initialSelectedItems", "items", "itemsSelectedLabel", "label", "listStyle", "loading", "loadingText", "onChange", "openOnFocus", "readOnly", "style", "variant"];
|
|
991
|
+
var MultiSelectOldContext = /*#__PURE__*/React.createContext(null);
|
|
992
|
+
var useMultiSelectOldContext = function useMultiSelectOldContext() {
|
|
993
|
+
var context = React.useContext(MultiSelectOldContext);
|
|
1029
994
|
if (!context) {
|
|
1030
995
|
throw new Error('You need to wrap your component in a DownshiftProvider');
|
|
1031
996
|
}
|
|
@@ -1037,8 +1002,8 @@ actionAndChanges) {
|
|
|
1037
1002
|
var changes = actionAndChanges.changes,
|
|
1038
1003
|
type = actionAndChanges.type;
|
|
1039
1004
|
switch (type) {
|
|
1040
|
-
case useSelect.stateChangeTypes.
|
|
1041
|
-
case useSelect.stateChangeTypes.
|
|
1005
|
+
case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:
|
|
1006
|
+
case useSelect.stateChangeTypes.ToggleButtonKeyDownSpaceButton:
|
|
1042
1007
|
case useSelect.stateChangeTypes.ItemClick:
|
|
1043
1008
|
return _extends({}, changes, {
|
|
1044
1009
|
isOpen: true,
|
|
@@ -1048,37 +1013,47 @@ actionAndChanges) {
|
|
|
1048
1013
|
return changes;
|
|
1049
1014
|
}
|
|
1050
1015
|
}
|
|
1051
|
-
|
|
1052
|
-
|
|
1016
|
+
/**
|
|
1017
|
+
* @deprecated
|
|
1018
|
+
* New MultiSelect available
|
|
1019
|
+
*
|
|
1020
|
+
* migration guide to new dropdown:
|
|
1021
|
+
* - change import from 'DropdownOld' to 'Dropdown'
|
|
1022
|
+
* - change from 'value' to 'selectedItem'
|
|
1023
|
+
* + type of 'selectedItem' is 'NormalizedDropdownType' and does not include 'string'
|
|
1024
|
+
* - 'onChange' must update value of 'selectedItem'
|
|
1025
|
+
*/
|
|
1026
|
+
var MultiSelectDeprecated = function MultiSelectDeprecated(_ref) {
|
|
1027
|
+
var className = _ref.className,
|
|
1028
|
+
_ref$clearable = _ref.clearable,
|
|
1029
|
+
clearable = _ref$clearable === void 0 ? false : _ref$clearable,
|
|
1030
|
+
debounceTimeout = _ref.debounceTimeout,
|
|
1031
|
+
disabled = _ref.disabled,
|
|
1032
|
+
feedback = _ref.feedback,
|
|
1033
|
+
_ref$initialSelectedI = _ref.initialSelectedItems,
|
|
1034
|
+
initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
|
|
1035
|
+
input = _ref.items,
|
|
1053
1036
|
_ref$itemsSelectedLab = _ref.itemsSelectedLabel,
|
|
1054
1037
|
itemsSelectedLabel = _ref$itemsSelectedLab === void 0 ? function (items) {
|
|
1055
1038
|
return SelectedItemsLabel(items);
|
|
1056
1039
|
} : _ref$itemsSelectedLab,
|
|
1057
1040
|
label = _ref.label,
|
|
1058
|
-
|
|
1059
|
-
variant = _ref.variant,
|
|
1060
|
-
disabled = _ref.disabled,
|
|
1061
|
-
_ref$readOnly = _ref.readOnly,
|
|
1062
|
-
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
1063
|
-
_ref$onChange = _ref.onChange,
|
|
1064
|
-
onChange = _ref$onChange === void 0 ? function () {
|
|
1065
|
-
return undefined;
|
|
1066
|
-
} : _ref$onChange,
|
|
1067
|
-
className = _ref.className,
|
|
1068
|
-
_ref$clearable = _ref.clearable,
|
|
1069
|
-
clearable = _ref$clearable === void 0 ? false : _ref$clearable,
|
|
1041
|
+
listStyle = _ref.listStyle,
|
|
1070
1042
|
_ref$loading = _ref.loading,
|
|
1071
1043
|
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
1072
1044
|
_ref$loadingText = _ref.loadingText,
|
|
1073
1045
|
loadingText = _ref$loadingText === void 0 ? '' : _ref$loadingText,
|
|
1046
|
+
_ref$onChange = _ref.onChange,
|
|
1047
|
+
onChange = _ref$onChange === void 0 ? function () {
|
|
1048
|
+
return undefined;
|
|
1049
|
+
} : _ref$onChange,
|
|
1074
1050
|
_ref$openOnFocus = _ref.openOnFocus,
|
|
1075
1051
|
openOnFocus = _ref$openOnFocus === void 0 ? false : _ref$openOnFocus,
|
|
1052
|
+
_ref$readOnly = _ref.readOnly,
|
|
1053
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
1076
1054
|
style = _ref.style,
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
initialSelectedItems = _ref$initialSelectedI === void 0 ? [] : _ref$initialSelectedI,
|
|
1080
|
-
debounceTimeout = _ref.debounceTimeout,
|
|
1081
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
1055
|
+
variant = _ref.variant,
|
|
1056
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$6);
|
|
1082
1057
|
var _useResolvedItems = useResolvedItems(input, debounceTimeout),
|
|
1083
1058
|
items = _useResolvedItems.items;
|
|
1084
1059
|
var _useState = useState(initialSelectedItems),
|
|
@@ -1124,7 +1099,7 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1124
1099
|
openMenu = _useSelect.openMenu;
|
|
1125
1100
|
var buttonText = selectedItems.length ? itemsSelectedLabel(selectedItems) : '';
|
|
1126
1101
|
var multiSelectId = useRandomId('eds-multiselect');
|
|
1127
|
-
return React.createElement(
|
|
1102
|
+
return React.createElement(MultiSelectOldContext.Provider, {
|
|
1128
1103
|
value: {
|
|
1129
1104
|
isOpen: isOpen,
|
|
1130
1105
|
reset: reset,
|
|
@@ -1144,7 +1119,7 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1144
1119
|
isFilled: selectedItems.length > 0 || isOpen,
|
|
1145
1120
|
disabled: disabled,
|
|
1146
1121
|
readOnly: readOnly,
|
|
1147
|
-
append: React.createElement(Appendix
|
|
1122
|
+
append: React.createElement(Appendix, {
|
|
1148
1123
|
hasSelected: clearable && selectedItems.length > 0,
|
|
1149
1124
|
loading: loading,
|
|
1150
1125
|
loadingText: loadingText,
|
|
@@ -1200,8 +1175,8 @@ var MultiSelect = function MultiSelect(_ref) {
|
|
|
1200
1175
|
};
|
|
1201
1176
|
var ClearButton = function ClearButton(_ref3) {
|
|
1202
1177
|
var props = _extends({}, (_objectDestructuringEmpty(_ref3), _ref3));
|
|
1203
|
-
var
|
|
1204
|
-
reset =
|
|
1178
|
+
var _useMultiSelectOldCon = useMultiSelectOldContext(),
|
|
1179
|
+
reset = _useMultiSelectOldCon.reset;
|
|
1205
1180
|
return React.createElement(React.Fragment, null, React.createElement("button", _extends({
|
|
1206
1181
|
className: "eds-dropdown__clear-button",
|
|
1207
1182
|
type: "button",
|
|
@@ -1213,13 +1188,13 @@ var ClearButton = function ClearButton(_ref3) {
|
|
|
1213
1188
|
className: "eds-dropdown__divider"
|
|
1214
1189
|
}));
|
|
1215
1190
|
};
|
|
1216
|
-
var Appendix
|
|
1191
|
+
var Appendix = function Appendix(_ref4) {
|
|
1217
1192
|
var loading = _ref4.loading,
|
|
1218
1193
|
loadingText = _ref4.loadingText,
|
|
1219
1194
|
readOnly = _ref4.readOnly,
|
|
1220
1195
|
hasSelected = _ref4.hasSelected;
|
|
1221
1196
|
if (loading) {
|
|
1222
|
-
return React.createElement(
|
|
1197
|
+
return React.createElement(DropdownDeprecatedLoadingDots, null, loadingText);
|
|
1223
1198
|
}
|
|
1224
1199
|
if (readOnly) {
|
|
1225
1200
|
return null;
|
|
@@ -1227,11 +1202,11 @@ var Appendix$1 = function Appendix(_ref4) {
|
|
|
1227
1202
|
return hasSelected ? React.createElement(React.Fragment, null, React.createElement(ClearButton, null), React.createElement(DropdownToggleButton, null)) : React.createElement(DropdownToggleButton, null);
|
|
1228
1203
|
};
|
|
1229
1204
|
var DropdownToggleButton = function DropdownToggleButton() {
|
|
1230
|
-
var
|
|
1231
|
-
getToggleButtonProps =
|
|
1232
|
-
isOpen =
|
|
1233
|
-
openMenu =
|
|
1234
|
-
openOnFocus =
|
|
1205
|
+
var _useMultiSelectOldCon2 = useMultiSelectOldContext(),
|
|
1206
|
+
getToggleButtonProps = _useMultiSelectOldCon2.getToggleButtonProps,
|
|
1207
|
+
isOpen = _useMultiSelectOldCon2.isOpen,
|
|
1208
|
+
openMenu = _useMultiSelectOldCon2.openMenu,
|
|
1209
|
+
openOnFocus = _useMultiSelectOldCon2.openOnFocus;
|
|
1235
1210
|
return React.createElement("button", _extends({}, getToggleButtonProps({
|
|
1236
1211
|
className: classNames('eds-dropdown__toggle-button', {
|
|
1237
1212
|
'eds-dropdown__toggle-button--open': isOpen
|
|
@@ -1263,46 +1238,248 @@ function SelectedItemsLabel(items) {
|
|
|
1263
1238
|
}).toString() : items.length + " elementer valgt";
|
|
1264
1239
|
}
|
|
1265
1240
|
|
|
1266
|
-
var _excluded$
|
|
1241
|
+
var _excluded$5 = ["ariaLabelChosenSingular", "ariaLabelSelectedItem", "getItemProps", "getMenuProps", "inputValue", "isOpen", "highlightedIndex", "listItems", "listStyle", "loading", "loadingText", "noMatchesText", "selectAllCheckboxState", "selectAllItem", "selectedItems", "showSelectAllInList"];
|
|
1267
1242
|
var DropdownList = function DropdownList(_ref) {
|
|
1268
|
-
var
|
|
1269
|
-
|
|
1270
|
-
|
|
1243
|
+
var _ref$ariaLabelChosenS = _ref.ariaLabelChosenSingular,
|
|
1244
|
+
ariaLabelChosenSingular = _ref$ariaLabelChosenS === void 0 ? 'valgt' : _ref$ariaLabelChosenS,
|
|
1245
|
+
_ref$ariaLabelSelecte = _ref.ariaLabelSelectedItem,
|
|
1246
|
+
ariaLabelSelectedItem = _ref$ariaLabelSelecte === void 0 ? ', valgt element, trykk for å fjerne' : _ref$ariaLabelSelecte,
|
|
1271
1247
|
getItemProps = _ref.getItemProps,
|
|
1272
|
-
|
|
1248
|
+
getMenuProps = _ref.getMenuProps,
|
|
1249
|
+
isOpen = _ref.isOpen,
|
|
1273
1250
|
highlightedIndex = _ref.highlightedIndex,
|
|
1251
|
+
listItems = _ref.listItems,
|
|
1274
1252
|
listStyle = _ref.listStyle,
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1253
|
+
_ref$loading = _ref.loading,
|
|
1254
|
+
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
1255
|
+
_ref$loadingText = _ref.loadingText,
|
|
1256
|
+
loadingText = _ref$loadingText === void 0 ? 'Laster inn …' : _ref$loadingText,
|
|
1257
|
+
_ref$noMatchesText = _ref.noMatchesText,
|
|
1258
|
+
noMatchesText = _ref$noMatchesText === void 0 ? 'Ingen treff for søket' : _ref$noMatchesText,
|
|
1259
|
+
selectAllCheckboxState = _ref.selectAllCheckboxState,
|
|
1260
|
+
selectAllItem = _ref.selectAllItem,
|
|
1261
|
+
selectedItems = _ref.selectedItems,
|
|
1262
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$5);
|
|
1263
|
+
var isMultiselect = selectAllItem !== undefined;
|
|
1264
|
+
var isNoMatches = !loading && (listItems.length === 0 || listItems.length === 1 && listItems[0].value === (selectAllItem == null ? void 0 : selectAllItem.value));
|
|
1265
|
+
var isItemSelected = function isItemSelected(item) {
|
|
1266
|
+
return selectedItems.some(function (selectedItem) {
|
|
1267
|
+
return selectedItem.value === item.value && selectedItem.label === item.label;
|
|
1268
|
+
});
|
|
1269
|
+
};
|
|
1270
|
+
var ariaLabelSelectAll = function ariaLabelSelectAll() {
|
|
1271
|
+
switch (selectAllCheckboxState == null ? void 0 : selectAllCheckboxState()) {
|
|
1272
|
+
case 'indeterminate':
|
|
1273
|
+
{
|
|
1274
|
+
return (selectAllItem == null ? void 0 : selectAllItem.label) + ", delvis valgt";
|
|
1275
|
+
}
|
|
1276
|
+
case true:
|
|
1277
|
+
{
|
|
1278
|
+
return (selectAllItem == null ? void 0 : selectAllItem.label) + ", " + ariaLabelChosenSingular;
|
|
1279
|
+
}
|
|
1280
|
+
default:
|
|
1281
|
+
{
|
|
1282
|
+
return "" + (selectAllItem == null ? void 0 : selectAllItem.label);
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
};
|
|
1286
|
+
var selectAllListItemContent = function selectAllListItemContent() {
|
|
1287
|
+
return React.createElement(React.Fragment, null, React.createElement(Checkbox, {
|
|
1288
|
+
"aria-hidden": "true",
|
|
1289
|
+
checked: selectAllCheckboxState == null ? void 0 : selectAllCheckboxState(),
|
|
1290
|
+
className: "eds-dropdown__list__item__checkbox",
|
|
1291
|
+
onChange: function onChange() {
|
|
1292
|
+
return;
|
|
1293
|
+
},
|
|
1294
|
+
tabIndex: -1
|
|
1295
|
+
}), React.createElement("span", {
|
|
1296
|
+
className: "eds-dropdown__list__item__text",
|
|
1297
|
+
"aria-label": ariaLabelSelectAll()
|
|
1298
|
+
}, selectAllItem == null ? void 0 : selectAllItem.label));
|
|
1299
|
+
};
|
|
1300
|
+
var listItemContent = function listItemContent(item) {
|
|
1301
|
+
return React.createElement(React.Fragment, null, React.createElement(Checkbox, {
|
|
1302
|
+
"aria-hidden": "true",
|
|
1303
|
+
checked: isItemSelected(item),
|
|
1304
|
+
className: "eds-dropdown__list__item__checkbox",
|
|
1305
|
+
onChange: function onChange() {
|
|
1306
|
+
return;
|
|
1307
|
+
},
|
|
1308
|
+
style: !isMultiselect ? {
|
|
1309
|
+
display: 'none'
|
|
1310
|
+
} : {},
|
|
1311
|
+
tabIndex: -1
|
|
1312
|
+
}), React.createElement("span", {
|
|
1313
|
+
className: "eds-dropdown__list__item__text"
|
|
1314
|
+
}, item.label, React.createElement(VisuallyHidden, null, isItemSelected(item) ? ariaLabelSelectedItem : '')), item.icons && React.createElement("span", null, item.icons.map(function (Icon, index) {
|
|
1315
|
+
return React.createElement(Icon, {
|
|
1316
|
+
key: index,
|
|
1317
|
+
inline: true,
|
|
1318
|
+
className: "eds-dropdown__list__item__icon"
|
|
1319
|
+
});
|
|
1320
|
+
})));
|
|
1321
|
+
};
|
|
1322
|
+
return (
|
|
1323
|
+
// use popover from @entur/tooltip when that package upgrades to floating-ui
|
|
1324
|
+
React.createElement("ul", _extends({}, getMenuProps(), {
|
|
1325
|
+
className: "eds-dropdown__list",
|
|
1326
|
+
style: _extends({
|
|
1327
|
+
display: isOpen ? 'inline-block' : 'none'
|
|
1328
|
+
}, rest.style, listStyle)
|
|
1329
|
+
}), listItems.length > 0 && listItems.map(function (item, index) {
|
|
1330
|
+
var itemIsSelectAll = item.value === (selectAllItem == null ? void 0 : selectAllItem.value);
|
|
1331
|
+
if (itemIsSelectAll && listItems.length <= 2) return null;
|
|
1332
|
+
return React.createElement("li", _extends({
|
|
1333
|
+
key: item.label,
|
|
1334
|
+
className: classNames('eds-dropdown__list__item', {
|
|
1335
|
+
'eds-dropdown__list__item--select-all': itemIsSelectAll,
|
|
1336
|
+
'eds-dropdown__list__item--highlighted': highlightedIndex === index,
|
|
1337
|
+
'eds-dropdown__list__item--selected': !isMultiselect && isItemSelected(item)
|
|
1289
1338
|
})
|
|
1290
1339
|
}, getItemProps({
|
|
1291
|
-
key:
|
|
1340
|
+
key: item.label,
|
|
1292
1341
|
item: item,
|
|
1293
1342
|
index: index
|
|
1294
|
-
})),
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
)
|
|
1302
|
-
|
|
1343
|
+
})), itemIsSelectAll ? selectAllListItemContent() : listItemContent(item));
|
|
1344
|
+
}), isNoMatches && React.createElement("li", {
|
|
1345
|
+
key: "dropdown-list-no-match",
|
|
1346
|
+
className: "eds-dropdown__list__item"
|
|
1347
|
+
}, noMatchesText), loading && React.createElement("li", {
|
|
1348
|
+
key: "dropdown-list-loading",
|
|
1349
|
+
className: "eds-dropdown__list__item"
|
|
1350
|
+
}, loadingText))
|
|
1351
|
+
);
|
|
1352
|
+
};
|
|
1353
|
+
|
|
1354
|
+
var _excluded$4 = ["tabIndex"];
|
|
1355
|
+
var SelectedItemTag = function SelectedItemTag(_ref) {
|
|
1356
|
+
var _getSelectedItemProps;
|
|
1357
|
+
var ariaLabelRemoveSelected = _ref.ariaLabelRemoveSelected,
|
|
1358
|
+
_ref$ariaLabelChosen = _ref.ariaLabelChosen,
|
|
1359
|
+
ariaLabelChosen = _ref$ariaLabelChosen === void 0 ? 'valgt' : _ref$ariaLabelChosen,
|
|
1360
|
+
disabled = _ref.disabled,
|
|
1361
|
+
getSelectedItemProps = _ref.getSelectedItemProps,
|
|
1362
|
+
index = _ref.index,
|
|
1363
|
+
readOnly = _ref.readOnly,
|
|
1364
|
+
removeSelectedItem = _ref.removeSelectedItem,
|
|
1365
|
+
selectedItem = _ref.selectedItem;
|
|
1366
|
+
var _ref2 = (_getSelectedItemProps = getSelectedItemProps == null ? void 0 : getSelectedItemProps({
|
|
1367
|
+
selectedItem: selectedItem,
|
|
1368
|
+
index: index
|
|
1369
|
+
})) != null ? _getSelectedItemProps : {},
|
|
1370
|
+
selectedItemProps = _objectWithoutPropertiesLoose(_ref2, _excluded$4);
|
|
1371
|
+
return React.createElement(TagChip, _extends({
|
|
1372
|
+
className: classNames('eds-dropdown__selected-item-tag', {
|
|
1373
|
+
'eds-dropdown__selected-item-tag--readonly': readOnly,
|
|
1374
|
+
'eds-dropdown__selected-item-tag--disabled': disabled
|
|
1375
|
+
})
|
|
1376
|
+
}, selectedItemProps, {
|
|
1377
|
+
onClose: function onClose(e) {
|
|
1378
|
+
e.stopPropagation();
|
|
1379
|
+
removeSelectedItem(selectedItem);
|
|
1380
|
+
},
|
|
1381
|
+
closeButtonAriaLabel: selectedItem.label + " " + ariaLabelChosen + ", " + ariaLabelRemoveSelected + " ",
|
|
1382
|
+
key: selectedItem.value,
|
|
1383
|
+
"aria-live": "polite"
|
|
1384
|
+
}), React.createElement("span", {
|
|
1385
|
+
"aria-hidden": "true"
|
|
1386
|
+
}, selectedItem.label));
|
|
1387
|
+
};
|
|
1388
|
+
var FieldAppend$1 = function FieldAppend(_ref3) {
|
|
1389
|
+
var _ref3$ariaHiddenToggl = _ref3.ariaHiddenToggleButton,
|
|
1390
|
+
ariaHiddenToggleButton = _ref3$ariaHiddenToggl === void 0 ? false : _ref3$ariaHiddenToggl,
|
|
1391
|
+
ariaLabelCloseList = _ref3.ariaLabelCloseList,
|
|
1392
|
+
ariaLabelOpenList = _ref3.ariaLabelOpenList,
|
|
1393
|
+
_ref3$clearable = _ref3.clearable,
|
|
1394
|
+
clearable = _ref3$clearable === void 0 ? false : _ref3$clearable,
|
|
1395
|
+
labelClearSelectedItems = _ref3.labelClearSelectedItems,
|
|
1396
|
+
_ref3$disabled = _ref3.disabled,
|
|
1397
|
+
disabled = _ref3$disabled === void 0 ? false : _ref3$disabled,
|
|
1398
|
+
_ref3$focusable = _ref3.focusable,
|
|
1399
|
+
focusable = _ref3$focusable === void 0 ? false : _ref3$focusable,
|
|
1400
|
+
getToggleButtonProps = _ref3.getToggleButtonProps,
|
|
1401
|
+
isOpen = _ref3.isOpen,
|
|
1402
|
+
_ref3$loading = _ref3.loading,
|
|
1403
|
+
loading = _ref3$loading === void 0 ? false : _ref3$loading,
|
|
1404
|
+
_ref3$loadingText = _ref3.loadingText,
|
|
1405
|
+
loadingText = _ref3$loadingText === void 0 ? 'Laster resultater …' : _ref3$loadingText,
|
|
1406
|
+
onClear = _ref3.onClear,
|
|
1407
|
+
selectedItems = _ref3.selectedItems;
|
|
1408
|
+
if (loading) {
|
|
1409
|
+
return React.createElement("div", {
|
|
1410
|
+
className: 'eds-dropdown-appendix__toggle-button--loading-dots'
|
|
1411
|
+
}, React.createElement(LoadingDots, {
|
|
1412
|
+
"aria-label": loadingText
|
|
1413
|
+
}));
|
|
1414
|
+
}
|
|
1415
|
+
if (disabled) {
|
|
1416
|
+
return null;
|
|
1417
|
+
}
|
|
1418
|
+
return React.createElement("div", {
|
|
1419
|
+
className: "eds-dropdown-appendix"
|
|
1420
|
+
}, clearable && (selectedItems == null ? void 0 : selectedItems.length) > 0 && selectedItems[0] !== null && React.createElement(React.Fragment, null, React.createElement(ClearableButton, {
|
|
1421
|
+
onClear: onClear,
|
|
1422
|
+
focusable: true,
|
|
1423
|
+
labelClearSelectedItems: labelClearSelectedItems
|
|
1424
|
+
}), React.createElement("div", {
|
|
1425
|
+
className: "eds-dropdown-appendix__divider"
|
|
1426
|
+
})), React.createElement(ToggleButton, {
|
|
1427
|
+
"aria-hidden": ariaHiddenToggleButton,
|
|
1428
|
+
ariaLabelCloseList: ariaLabelCloseList,
|
|
1429
|
+
ariaLabelOpenList: ariaLabelOpenList,
|
|
1430
|
+
getToggleButtonProps: getToggleButtonProps,
|
|
1431
|
+
isOpen: isOpen,
|
|
1432
|
+
focusable: focusable
|
|
1433
|
+
}));
|
|
1434
|
+
};
|
|
1435
|
+
var ClearableButton = function ClearableButton(_ref4) {
|
|
1436
|
+
var onClear = _ref4.onClear,
|
|
1437
|
+
_ref4$labelClearSelec = _ref4.labelClearSelectedItems,
|
|
1438
|
+
labelClearSelectedItems = _ref4$labelClearSelec === void 0 ? 'Fjern valgte' : _ref4$labelClearSelec,
|
|
1439
|
+
_ref4$focusable = _ref4.focusable,
|
|
1440
|
+
focusable = _ref4$focusable === void 0 ? false : _ref4$focusable;
|
|
1441
|
+
return React.createElement(Tooltip, {
|
|
1442
|
+
"aria-hidden": "true",
|
|
1443
|
+
placement: "right",
|
|
1444
|
+
content: labelClearSelectedItems
|
|
1445
|
+
}, React.createElement(IconButton, {
|
|
1446
|
+
className: "eds-dropdown-appendix__clear-button",
|
|
1447
|
+
type: "button",
|
|
1448
|
+
tabIndex: focusable ? 0 : 1,
|
|
1449
|
+
onClick: onClear,
|
|
1450
|
+
"aria-label": labelClearSelectedItems
|
|
1451
|
+
}, React.createElement(CloseSmallIcon, {
|
|
1452
|
+
"aria-hidden": "true"
|
|
1453
|
+
})));
|
|
1454
|
+
};
|
|
1455
|
+
var ToggleButton = function ToggleButton(_ref5) {
|
|
1456
|
+
var getToggleButtonProps = _ref5.getToggleButtonProps,
|
|
1457
|
+
isOpen = _ref5.isOpen,
|
|
1458
|
+
_ref5$ariaHidden = _ref5['aria-hidden'],
|
|
1459
|
+
ariaHidden = _ref5$ariaHidden === void 0 ? false : _ref5$ariaHidden,
|
|
1460
|
+
_ref5$ariaLabelCloseL = _ref5.ariaLabelCloseList,
|
|
1461
|
+
ariaLabelCloseList = _ref5$ariaLabelCloseL === void 0 ? 'Lukk liste med valg' : _ref5$ariaLabelCloseL,
|
|
1462
|
+
_ref5$ariaLabelOpenLi = _ref5.ariaLabelOpenList,
|
|
1463
|
+
ariaLabelOpenList = _ref5$ariaLabelOpenLi === void 0 ? 'Åpne liste med valg' : _ref5$ariaLabelOpenLi,
|
|
1464
|
+
_ref5$focusable = _ref5.focusable,
|
|
1465
|
+
focusable = _ref5$focusable === void 0 ? false : _ref5$focusable;
|
|
1466
|
+
return React.createElement(IconButton, _extends({}, getToggleButtonProps({
|
|
1467
|
+
className: classNames('eds-dropdown-appendix__toggle-button', {
|
|
1468
|
+
'eds-dropdown-appendix__toggle-button--open': isOpen
|
|
1469
|
+
}),
|
|
1470
|
+
'aria-labelledby': undefined
|
|
1471
|
+
}), {
|
|
1472
|
+
"aria-hidden": ariaHidden,
|
|
1473
|
+
"aria-label": ariaHidden ? undefined : isOpen ? ariaLabelCloseList : ariaLabelOpenList,
|
|
1474
|
+
tabIndex: focusable ? 0 : -1,
|
|
1475
|
+
type: "button"
|
|
1476
|
+
}), React.createElement(DownArrowIcon, {
|
|
1477
|
+
"aria-hidden": "true"
|
|
1478
|
+
}));
|
|
1303
1479
|
};
|
|
1304
1480
|
|
|
1305
|
-
|
|
1481
|
+
/* start general utils */
|
|
1482
|
+
var EMPTY_INPUT = '';
|
|
1306
1483
|
function lowerCaseFilterTest(item, input) {
|
|
1307
1484
|
if (!input) {
|
|
1308
1485
|
return true;
|
|
@@ -1311,168 +1488,899 @@ function lowerCaseFilterTest(item, input) {
|
|
|
1311
1488
|
var inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');
|
|
1312
1489
|
return inputRegex.test(item.label);
|
|
1313
1490
|
}
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1491
|
+
var itemToString = function itemToString(item) {
|
|
1492
|
+
return item ? item.label : '';
|
|
1493
|
+
};
|
|
1494
|
+
var useMultiselectUtils = function useMultiselectUtils(_ref) {
|
|
1495
|
+
var listItems = _ref.listItems,
|
|
1496
|
+
selectedItems = _ref.selectedItems,
|
|
1497
|
+
selectAll = _ref.selectAll;
|
|
1498
|
+
var hasSelectedItems = selectedItems.length > 0;
|
|
1499
|
+
var listItemsWithoutSelectAll = listItems.filter(function (item) {
|
|
1500
|
+
return item.value !== selectAll.value;
|
|
1501
|
+
});
|
|
1502
|
+
var allListItemsAreSelected = listItemsWithoutSelectAll.filter(function (item) {
|
|
1503
|
+
return !selectedItems.includes(item);
|
|
1504
|
+
}).length === 0;
|
|
1505
|
+
var someListItemsAreSelected = listItemsWithoutSelectAll.some(function (item) {
|
|
1506
|
+
return selectedItems.includes(item);
|
|
1507
|
+
});
|
|
1508
|
+
var addClickedItemToSelectedItems = function addClickedItemToSelectedItems(clickedItem, onChange) {
|
|
1509
|
+
return onChange([].concat(selectedItems, [clickedItem]));
|
|
1510
|
+
};
|
|
1511
|
+
var clickedItemIsInSelectedItems = function clickedItemIsInSelectedItems(clickedItem) {
|
|
1512
|
+
return selectedItems.some(function (selectedItem) {
|
|
1513
|
+
return selectedItem.value === clickedItem.value;
|
|
1514
|
+
});
|
|
1515
|
+
};
|
|
1516
|
+
var clickedItemIsSelectAll = function clickedItemIsSelectAll(clickedItem) {
|
|
1517
|
+
return clickedItem.value === selectAll.value;
|
|
1518
|
+
};
|
|
1519
|
+
var handleListItemClicked = function handleListItemClicked(_ref2) {
|
|
1520
|
+
var clickedItem = _ref2.clickedItem,
|
|
1521
|
+
onChange = _ref2.onChange,
|
|
1522
|
+
setLastRemovedItem = _ref2.setLastRemovedItem;
|
|
1523
|
+
if (clickedItemIsSelectAll(clickedItem)) {
|
|
1524
|
+
if (allListItemsAreSelected) {
|
|
1525
|
+
setLastRemovedItem(selectAll);
|
|
1526
|
+
return unselectAllListItems(onChange);
|
|
1527
|
+
}
|
|
1528
|
+
return selectAllUnselectedItemsInListItems(onChange);
|
|
1529
|
+
}
|
|
1530
|
+
if (clickedItemIsInSelectedItems(clickedItem)) {
|
|
1531
|
+
setLastRemovedItem(clickedItem);
|
|
1532
|
+
return removeClickedItemFromSelectedItems(clickedItem, onChange);
|
|
1533
|
+
}
|
|
1534
|
+
addClickedItemToSelectedItems(clickedItem, onChange);
|
|
1535
|
+
};
|
|
1536
|
+
var removeClickedItemFromSelectedItems = function removeClickedItemFromSelectedItems(clickedItem, onChange) {
|
|
1537
|
+
return onChange(selectedItems.filter(function (selectedItem) {
|
|
1538
|
+
return selectedItem.value !== clickedItem.value;
|
|
1539
|
+
}));
|
|
1540
|
+
};
|
|
1541
|
+
var selectAllCheckboxState = function selectAllCheckboxState() {
|
|
1542
|
+
if (allListItemsAreSelected) return true;
|
|
1543
|
+
if (someListItemsAreSelected) return 'indeterminate';
|
|
1544
|
+
return false;
|
|
1545
|
+
};
|
|
1546
|
+
var selectAllUnselectedItemsInListItems = function selectAllUnselectedItemsInListItems(onChange) {
|
|
1547
|
+
onChange([].concat(selectedItems, listItemsWithoutSelectAll.filter(function (item) {
|
|
1548
|
+
return !selectedItems.includes(item);
|
|
1549
|
+
})));
|
|
1550
|
+
};
|
|
1551
|
+
var unselectAllListItems = function unselectAllListItems(onChange) {
|
|
1552
|
+
onChange(selectedItems.filter(function (item) {
|
|
1553
|
+
return !listItemsWithoutSelectAll.includes(item);
|
|
1554
|
+
}));
|
|
1555
|
+
};
|
|
1556
|
+
return {
|
|
1557
|
+
addClickedItemToSelectedItems: addClickedItemToSelectedItems,
|
|
1558
|
+
allListItemsAreSelected: allListItemsAreSelected,
|
|
1559
|
+
clickedItemIsInSelectedItems: clickedItemIsInSelectedItems,
|
|
1560
|
+
clickedItemIsSelectAll: clickedItemIsSelectAll,
|
|
1561
|
+
handleListItemClicked: handleListItemClicked,
|
|
1562
|
+
hasSelectedItems: hasSelectedItems,
|
|
1563
|
+
listItemsWithoutSelectAll: listItemsWithoutSelectAll,
|
|
1564
|
+
removeClickedItemFromSelectedItems: removeClickedItemFromSelectedItems,
|
|
1565
|
+
selectAllCheckboxState: selectAllCheckboxState,
|
|
1566
|
+
selectAllUnselectedItemsInListItems: selectAllUnselectedItemsInListItems,
|
|
1567
|
+
someListItemsAreSelected: someListItemsAreSelected,
|
|
1568
|
+
unselectAllListItems: unselectAllListItems
|
|
1569
|
+
};
|
|
1570
|
+
};
|
|
1571
|
+
function getA11yStatusMessage(options) {
|
|
1572
|
+
var isOpen = options.isOpen,
|
|
1573
|
+
resultCount = options.resultCount,
|
|
1574
|
+
previousResultCount = options.previousResultCount,
|
|
1575
|
+
_options$selectAllIte = options.selectAllItemIncluded,
|
|
1576
|
+
selectAllItemIncluded = _options$selectAllIte === void 0 ? false : _options$selectAllIte,
|
|
1577
|
+
_options$ariaLabelNoR = options.ariaLabelNoResults,
|
|
1578
|
+
ariaLabelNoResults = _options$ariaLabelNoR === void 0 ? 'Ingen resultater' : _options$ariaLabelNoR;
|
|
1579
|
+
if (!isOpen) {
|
|
1580
|
+
return '';
|
|
1581
|
+
}
|
|
1582
|
+
var resultCountWithoutSelectAll = selectAllItemIncluded ? resultCount - 1 : resultCount;
|
|
1583
|
+
if (resultCountWithoutSelectAll === 0) {
|
|
1584
|
+
return ariaLabelNoResults;
|
|
1585
|
+
}
|
|
1586
|
+
if (resultCount !== previousResultCount) {
|
|
1587
|
+
return resultCountWithoutSelectAll + " resultat" + (resultCountWithoutSelectAll === 1 ? '' : 'er') + " tilgjengelig, naviger med pil opp eller ned, velg elementer med enter.";
|
|
1588
|
+
}
|
|
1589
|
+
return '';
|
|
1590
|
+
}
|
|
1591
|
+
function getA11ySelectionMessage(options) {
|
|
1592
|
+
var selectedItem = options.selectedItem,
|
|
1593
|
+
itemToStringLocal = options.itemToString,
|
|
1594
|
+
selectAllItem = options.selectAllItem;
|
|
1595
|
+
if ((selectedItem == null ? void 0 : selectedItem.value) === (selectAllItem == null ? void 0 : selectAllItem.value)) return 'Alle elementer i listen valgt.';
|
|
1596
|
+
return selectedItem ? itemToStringLocal(selectedItem) + " er valgt." : '';
|
|
1597
|
+
}
|
|
1598
|
+
function getA11yRemovalMessage(options) {
|
|
1599
|
+
var itemToString = options.itemToString,
|
|
1600
|
+
selectAllItem = options.selectAllItem,
|
|
1601
|
+
removedItem = options.removedItem;
|
|
1602
|
+
if (removedItem === undefined) return '';
|
|
1603
|
+
if (removedItem.value === (selectAllItem == null ? void 0 : selectAllItem.value)) return 'Alle elementer i listen fjernet fra valgte.';
|
|
1604
|
+
return itemToString(removedItem) + " fjernet fra valgte.";
|
|
1605
|
+
}
|
|
1606
|
+
/**A VoiceOver click is always preformed in the center of the clicked element.
|
|
1607
|
+
This functions expolits that to check if the performed click likely is
|
|
1608
|
+
made by VoiceOver. */
|
|
1609
|
+
var isVoiceOverClick = function isVoiceOverClick(clickEvent) {
|
|
1610
|
+
var targetElementRect = clickEvent.currentTarget.getBoundingClientRect();
|
|
1611
|
+
var targetElementMiddleX = Math.floor(targetElementRect.x + targetElementRect.width / 2);
|
|
1612
|
+
var targetElementMiddleY = Math.floor(targetElementRect.y + targetElementRect.height / 2);
|
|
1613
|
+
var clickPositionX = clickEvent.clientX;
|
|
1614
|
+
var clickPositionY = clickEvent.clientY;
|
|
1615
|
+
console.log('targetX:', targetElementMiddleX, 'targetY:', targetElementMiddleY, 'clickX:', clickPositionX, 'clickY:', clickPositionY);
|
|
1616
|
+
return Math.abs(targetElementMiddleX - clickPositionX) <= 1 && Math.abs(targetElementMiddleY - clickPositionY) <= 1;
|
|
1617
|
+
};
|
|
1618
|
+
/* end a11y utils */
|
|
1619
|
+
|
|
1620
|
+
var _excluded$3 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "debounceTimeout", "disabled", "disableLabelAnimation", "feedback", "itemFilter", "items", "label", "labelClearSelectedItem", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
|
|
1621
|
+
var SearchableDropdown = function SearchableDropdown(_ref) {
|
|
1317
1622
|
var _selectedItem$label;
|
|
1318
|
-
var
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
label = _ref.label,
|
|
1322
|
-
placeholder = _ref.placeholder,
|
|
1623
|
+
var ariaLabelCloseList = _ref.ariaLabelCloseList,
|
|
1624
|
+
ariaLabelOpenList = _ref.ariaLabelOpenList,
|
|
1625
|
+
className = _ref.className,
|
|
1323
1626
|
_ref$clearable = _ref.clearable,
|
|
1324
|
-
clearable = _ref$clearable === void 0 ?
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
_ref$
|
|
1328
|
-
|
|
1627
|
+
clearable = _ref$clearable === void 0 ? true : _ref$clearable,
|
|
1628
|
+
debounceTimeout = _ref.debounceTimeout,
|
|
1629
|
+
_ref$disabled = _ref.disabled,
|
|
1630
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
1631
|
+
_ref$disableLabelAnim = _ref.disableLabelAnimation,
|
|
1632
|
+
disableLabelAnimation = _ref$disableLabelAnim === void 0 ? false : _ref$disableLabelAnim,
|
|
1329
1633
|
feedback = _ref.feedback,
|
|
1634
|
+
_ref$itemFilter = _ref.itemFilter,
|
|
1635
|
+
itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
|
|
1636
|
+
initialItems = _ref.items,
|
|
1637
|
+
label = _ref.label,
|
|
1638
|
+
_ref$labelClearSelect = _ref.labelClearSelectedItem,
|
|
1639
|
+
labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
|
|
1640
|
+
listStyle = _ref.listStyle,
|
|
1641
|
+
loadingText = _ref.loadingText,
|
|
1642
|
+
onChange = _ref.onChange,
|
|
1643
|
+
placeholder = _ref.placeholder,
|
|
1644
|
+
prepend = _ref.prepend,
|
|
1645
|
+
_ref$readOnly = _ref.readOnly,
|
|
1646
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
1647
|
+
value = _ref.selectedItem,
|
|
1648
|
+
_ref$selectOnBlur = _ref.selectOnBlur,
|
|
1649
|
+
selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
|
|
1650
|
+
style = _ref.style,
|
|
1330
1651
|
_ref$variant = _ref.variant,
|
|
1331
1652
|
variant = _ref$variant === void 0 ? 'info' : _ref$variant,
|
|
1332
|
-
|
|
1333
|
-
listStyle = _ref.listStyle,
|
|
1334
|
-
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
1335
|
-
var _React$useState = React.useState(items),
|
|
1336
|
-
filteredItems = _React$useState[0],
|
|
1337
|
-
setFilteredItems = _React$useState[1];
|
|
1653
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$3);
|
|
1338
1654
|
var _useState = useState(false),
|
|
1339
1655
|
hideSelectedItem = _useState[0],
|
|
1340
1656
|
setHideSelectedItem = _useState[1];
|
|
1657
|
+
var _React$useState = React.useState(0),
|
|
1658
|
+
lastHighlightedIndex = _React$useState[0],
|
|
1659
|
+
setLastHighlightedIndex = _React$useState[1];
|
|
1341
1660
|
var inputRef = useRef(null);
|
|
1342
|
-
var
|
|
1343
|
-
|
|
1344
|
-
|
|
1661
|
+
var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
|
|
1662
|
+
normalizedItems = _useResolvedItems.items,
|
|
1663
|
+
loading = _useResolvedItems.loading,
|
|
1664
|
+
fetchItems = _useResolvedItems.fetchItems;
|
|
1665
|
+
var _React$useState2 = React.useState(normalizedItems),
|
|
1666
|
+
listItems = _React$useState2[0],
|
|
1667
|
+
setListItems = _React$useState2[1];
|
|
1668
|
+
var filterListItems = function filterListItems(_ref2) {
|
|
1669
|
+
var inputValue = _ref2.inputValue;
|
|
1670
|
+
return setListItems(normalizedItems.filter(function (item) {
|
|
1671
|
+
return itemFilter(item, inputValue);
|
|
1672
|
+
}));
|
|
1673
|
+
};
|
|
1674
|
+
var updateListItems = function updateListItems(_ref3) {
|
|
1675
|
+
var inputValue = _ref3.inputValue;
|
|
1676
|
+
if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : EMPTY_INPUT); // fetch items only if user provides a function as items
|
|
1677
|
+
filterListItems({
|
|
1678
|
+
inputValue: inputValue != null ? inputValue : EMPTY_INPUT
|
|
1679
|
+
});
|
|
1680
|
+
};
|
|
1681
|
+
React.useEffect(function () {
|
|
1682
|
+
filterListItems({
|
|
1683
|
+
inputValue: inputValue
|
|
1684
|
+
});
|
|
1685
|
+
}, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
1686
|
+
var stateReducer = React.useCallback(function (_, _ref4) {
|
|
1687
|
+
var type = _ref4.type,
|
|
1688
|
+
changes = _ref4.changes;
|
|
1689
|
+
if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
|
|
1690
|
+
setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
|
|
1691
|
+
}
|
|
1345
1692
|
switch (type) {
|
|
1693
|
+
// empty input to show selected item and reset dropdown list on item selection
|
|
1346
1694
|
case useCombobox.stateChangeTypes.ItemClick:
|
|
1347
1695
|
case useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
1348
1696
|
case useCombobox.stateChangeTypes.InputBlur:
|
|
1349
1697
|
case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1698
|
+
{
|
|
1699
|
+
filterListItems({
|
|
1700
|
+
inputValue: EMPTY_INPUT
|
|
1701
|
+
});
|
|
1702
|
+
return _extends({}, changes, {
|
|
1703
|
+
inputValue: EMPTY_INPUT
|
|
1704
|
+
});
|
|
1705
|
+
}
|
|
1706
|
+
// remove leading whitespace, select element with spacebar on empty input, and filter list based on input
|
|
1707
|
+
case useCombobox.stateChangeTypes.InputChange:
|
|
1708
|
+
{
|
|
1709
|
+
var _changes$inputValue;
|
|
1710
|
+
var leadingWhitespaceTest = /^\s+/g;
|
|
1711
|
+
var isSpacePressedOnEmptyInput = changes.inputValue === ' ';
|
|
1712
|
+
if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(leadingWhitespaceTest)) {
|
|
1713
|
+
setInputValue(changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT));
|
|
1714
|
+
if (isSpacePressedOnEmptyInput) {
|
|
1715
|
+
openMenu();
|
|
1716
|
+
if (isOpen && changes.highlightedIndex !== undefined) {
|
|
1717
|
+
onChange == null ? void 0 : onChange(listItems[changes.highlightedIndex]);
|
|
1718
|
+
}
|
|
1719
|
+
}
|
|
1720
|
+
} else {
|
|
1721
|
+
updateListItems({
|
|
1722
|
+
inputValue: changes.inputValue
|
|
1723
|
+
});
|
|
1724
|
+
}
|
|
1725
|
+
return changes;
|
|
1726
|
+
}
|
|
1353
1727
|
default:
|
|
1354
1728
|
return changes;
|
|
1355
1729
|
}
|
|
1356
|
-
}, []);
|
|
1730
|
+
}, [fetchItems, filterListItems]);
|
|
1357
1731
|
var _useCombobox = useCombobox(_extends({
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
return lowerCaseFilterTest(item, inputValue);
|
|
1362
|
-
}));
|
|
1363
|
-
},
|
|
1364
|
-
items: filteredItems,
|
|
1365
|
-
itemToString: function itemToString(item) {
|
|
1366
|
-
if (item) return item.value;
|
|
1367
|
-
return '';
|
|
1368
|
-
},
|
|
1369
|
-
stateReducer: stateReducer,
|
|
1732
|
+
defaultHighlightedIndex: lastHighlightedIndex,
|
|
1733
|
+
items: listItems,
|
|
1734
|
+
itemToString: itemToString,
|
|
1370
1735
|
selectedItem: value,
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1736
|
+
stateReducer: stateReducer,
|
|
1737
|
+
onStateChange: function onStateChange(_ref5) {
|
|
1738
|
+
var type = _ref5.type,
|
|
1739
|
+
clickedItem = _ref5.selectedItem;
|
|
1740
|
+
switch (type) {
|
|
1741
|
+
// @ts-expect-error This falltrough is wanted
|
|
1742
|
+
case useCombobox.stateChangeTypes.InputBlur:
|
|
1743
|
+
if (!selectOnBlur) break;
|
|
1744
|
+
case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
|
|
1745
|
+
case useCombobox.stateChangeTypes.ItemClick:
|
|
1746
|
+
onChange == null ? void 0 : onChange(clickedItem != null ? clickedItem : null);
|
|
1747
|
+
}
|
|
1748
|
+
},
|
|
1749
|
+
// Accessibility
|
|
1750
|
+
getA11yStatusMessage: getA11yStatusMessage,
|
|
1751
|
+
// The following A11y-helper does not work due to a bug (https://github.com/downshift-js/downshift/issues/1227)
|
|
1752
|
+
// but is left here for when it is fixed
|
|
1753
|
+
getA11ySelectionMessage: function getA11ySelectionMessage$1(options) {
|
|
1754
|
+
return getA11ySelectionMessage(options);
|
|
1374
1755
|
}
|
|
1375
1756
|
}, rest)),
|
|
1376
1757
|
isOpen = _useCombobox.isOpen,
|
|
1758
|
+
openMenu = _useCombobox.openMenu,
|
|
1377
1759
|
getToggleButtonProps = _useCombobox.getToggleButtonProps,
|
|
1378
1760
|
getLabelProps = _useCombobox.getLabelProps,
|
|
1379
1761
|
getMenuProps = _useCombobox.getMenuProps,
|
|
1380
1762
|
getInputProps = _useCombobox.getInputProps,
|
|
1381
|
-
getComboboxProps = _useCombobox.getComboboxProps,
|
|
1382
1763
|
highlightedIndex = _useCombobox.highlightedIndex,
|
|
1383
1764
|
getItemProps = _useCombobox.getItemProps,
|
|
1384
1765
|
selectedItem = _useCombobox.selectedItem,
|
|
1385
|
-
|
|
1386
|
-
|
|
1766
|
+
inputValue = _useCombobox.inputValue,
|
|
1767
|
+
setInputValue = _useCombobox.setInputValue;
|
|
1768
|
+
var handleOnClear = function handleOnClear() {
|
|
1769
|
+
var _inputRef$current;
|
|
1770
|
+
onChange == null ? void 0 : onChange(null);
|
|
1771
|
+
setInputValue(EMPTY_INPUT);
|
|
1772
|
+
(_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.focus();
|
|
1773
|
+
updateListItems({
|
|
1774
|
+
inputValue: inputValue
|
|
1775
|
+
});
|
|
1776
|
+
};
|
|
1387
1777
|
return React.createElement("div", {
|
|
1388
|
-
className: "eds-
|
|
1778
|
+
className: "eds-dropdown__wrapper"
|
|
1389
1779
|
}, React.createElement(BaseFormControl, _extends({
|
|
1390
|
-
append: React.createElement(
|
|
1391
|
-
|
|
1392
|
-
|
|
1780
|
+
append: React.createElement(FieldAppend$1, {
|
|
1781
|
+
ariaLabelCloseList: ariaLabelCloseList,
|
|
1782
|
+
ariaLabelOpenList: ariaLabelOpenList,
|
|
1393
1783
|
clearable: clearable,
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1784
|
+
labelClearSelectedItems: labelClearSelectedItem,
|
|
1785
|
+
disabled: readOnly || disabled,
|
|
1786
|
+
focusable: false,
|
|
1787
|
+
getToggleButtonProps: getToggleButtonProps,
|
|
1788
|
+
isOpen: isOpen,
|
|
1789
|
+
loading: loading,
|
|
1790
|
+
loadingText: loadingText,
|
|
1791
|
+
onClear: handleOnClear,
|
|
1792
|
+
selectedItems: [selectedItem]
|
|
1399
1793
|
}),
|
|
1400
|
-
className: classNames('eds-
|
|
1401
|
-
|
|
1402
|
-
|
|
1794
|
+
className: classNames('eds-dropdown', className),
|
|
1795
|
+
disabled: disabled,
|
|
1796
|
+
disableLabelAnimation: disableLabelAnimation,
|
|
1403
1797
|
feedback: feedback,
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1798
|
+
isFilled: selectedItem !== null || inputValue !== EMPTY_INPUT,
|
|
1799
|
+
label: label,
|
|
1800
|
+
labelId: getLabelProps().id,
|
|
1801
|
+
labelProps: getLabelProps(),
|
|
1802
|
+
prepend: prepend,
|
|
1803
|
+
readOnly: readOnly,
|
|
1804
|
+
style: style,
|
|
1805
|
+
variant: variant
|
|
1806
|
+
}, rest), !hideSelectedItem && selectedItem && !inputValue && React.createElement("span", {
|
|
1807
|
+
className: "eds-dropdown__selected-item__wrapper",
|
|
1808
|
+
"aria-hidden": "true"
|
|
1409
1809
|
}, React.createElement("span", {
|
|
1410
|
-
className: "eds-
|
|
1810
|
+
className: "eds-dropdown__selected-item",
|
|
1411
1811
|
onClick: function onClick() {
|
|
1412
|
-
var _inputRef$
|
|
1413
|
-
return (_inputRef$
|
|
1812
|
+
var _inputRef$current2;
|
|
1813
|
+
return (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.focus();
|
|
1414
1814
|
}
|
|
1415
1815
|
}, selectedItem.label)), React.createElement("input", _extends({
|
|
1416
|
-
|
|
1417
|
-
|
|
1816
|
+
className: "eds-dropdown__input eds-form-control",
|
|
1817
|
+
disabled: readOnly || disabled,
|
|
1818
|
+
placeholder: (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : placeholder
|
|
1418
1819
|
}, getInputProps({
|
|
1419
|
-
|
|
1420
|
-
if (!isOpen &&
|
|
1421
|
-
setHideSelectedItem(true);
|
|
1820
|
+
onClick: function onClick(e) {
|
|
1821
|
+
if (!isOpen && isVoiceOverClick(e)) openMenu();
|
|
1422
1822
|
},
|
|
1423
1823
|
onBlur: function onBlur() {
|
|
1424
1824
|
setHideSelectedItem(false);
|
|
1425
1825
|
},
|
|
1826
|
+
onFocus: function onFocus() {
|
|
1827
|
+
setHideSelectedItem(true);
|
|
1828
|
+
},
|
|
1426
1829
|
ref: inputRef
|
|
1427
1830
|
})))), React.createElement(DropdownList, {
|
|
1428
|
-
selectedItem: selectedItem,
|
|
1429
1831
|
isOpen: isOpen,
|
|
1430
|
-
|
|
1431
|
-
highlightedIndex: highlightedIndex,
|
|
1832
|
+
listItems: listItems,
|
|
1432
1833
|
listStyle: listStyle,
|
|
1834
|
+
loading: loading,
|
|
1835
|
+
loadingText: loadingText,
|
|
1836
|
+
getItemProps: getItemProps,
|
|
1433
1837
|
getMenuProps: getMenuProps,
|
|
1434
|
-
|
|
1838
|
+
highlightedIndex: highlightedIndex,
|
|
1839
|
+
selectedItems: selectedItem !== null ? [selectedItem] : []
|
|
1435
1840
|
}));
|
|
1436
1841
|
};
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1842
|
+
|
|
1843
|
+
var _excluded$2 = ["className", "clearable", "clearInputOnSelect", "debounceTimeout", "disabled", "feedback", "hideSelectAll", "itemFilter", "items", "label", "labelAllItemsSelected", "labelClearAllItems", "labelSelectAll", "listStyle", "loadingText", "maxTags", "noMatchesText", "onChange", "placeholder", "readOnly", "selectedItems", "selectOnBlur", "style", "variant", "ariaLabelChosenSingular", "ariaLabelChosenPlural", "ariaLabelCloseList", "ariaLabelJumpToInput", "ariaLabelOpenList", "ariaLabelRemoveSelected", "ariaLabelSelectedItem"];
|
|
1844
|
+
var MultiSelect = function MultiSelect(_ref) {
|
|
1845
|
+
var className = _ref.className,
|
|
1846
|
+
_ref$clearable = _ref.clearable,
|
|
1847
|
+
clearable = _ref$clearable === void 0 ? true : _ref$clearable,
|
|
1848
|
+
_ref$clearInputOnSele = _ref.clearInputOnSelect,
|
|
1849
|
+
clearInputOnSelect = _ref$clearInputOnSele === void 0 ? false : _ref$clearInputOnSele,
|
|
1850
|
+
debounceTimeout = _ref.debounceTimeout,
|
|
1851
|
+
_ref$disabled = _ref.disabled,
|
|
1852
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
1853
|
+
feedback = _ref.feedback,
|
|
1854
|
+
_ref$hideSelectAll = _ref.hideSelectAll,
|
|
1855
|
+
hideSelectAll = _ref$hideSelectAll === void 0 ? false : _ref$hideSelectAll,
|
|
1856
|
+
_ref$itemFilter = _ref.itemFilter,
|
|
1857
|
+
itemFilter = _ref$itemFilter === void 0 ? lowerCaseFilterTest : _ref$itemFilter,
|
|
1858
|
+
initialItems = _ref.items,
|
|
1859
|
+
label = _ref.label,
|
|
1860
|
+
_ref$labelAllItemsSel = _ref.labelAllItemsSelected,
|
|
1861
|
+
labelAllItemsSelected = _ref$labelAllItemsSel === void 0 ? 'Alle valgt' : _ref$labelAllItemsSel,
|
|
1862
|
+
_ref$labelClearAllIte = _ref.labelClearAllItems,
|
|
1863
|
+
labelClearAllItems = _ref$labelClearAllIte === void 0 ? 'Fjern valgte' : _ref$labelClearAllIte,
|
|
1864
|
+
_ref$labelSelectAll = _ref.labelSelectAll,
|
|
1865
|
+
labelSelectAll = _ref$labelSelectAll === void 0 ? 'Velg alle' : _ref$labelSelectAll,
|
|
1866
|
+
listStyle = _ref.listStyle,
|
|
1867
|
+
loadingText = _ref.loadingText,
|
|
1868
|
+
_ref$maxTags = _ref.maxTags,
|
|
1869
|
+
maxTags = _ref$maxTags === void 0 ? 10 : _ref$maxTags,
|
|
1870
|
+
_ref$onChange = _ref.onChange,
|
|
1871
|
+
onChange = _ref$onChange === void 0 ? function () {
|
|
1872
|
+
return undefined;
|
|
1873
|
+
} : _ref$onChange,
|
|
1874
|
+
placeholder = _ref.placeholder,
|
|
1875
|
+
_ref$readOnly = _ref.readOnly,
|
|
1876
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
1877
|
+
selectedItems = _ref.selectedItems,
|
|
1878
|
+
_ref$selectOnBlur = _ref.selectOnBlur,
|
|
1879
|
+
selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
|
|
1880
|
+
style = _ref.style,
|
|
1881
|
+
_ref$variant = _ref.variant,
|
|
1882
|
+
variant = _ref$variant === void 0 ? 'info' : _ref$variant,
|
|
1883
|
+
_ref$ariaLabelChosenS = _ref.ariaLabelChosenSingular,
|
|
1884
|
+
ariaLabelChosenSingular = _ref$ariaLabelChosenS === void 0 ? 'valgt' : _ref$ariaLabelChosenS,
|
|
1885
|
+
_ref$ariaLabelChosenP = _ref.ariaLabelChosenPlural,
|
|
1886
|
+
ariaLabelChosenPlural = _ref$ariaLabelChosenP === void 0 ? 'valgte' : _ref$ariaLabelChosenP,
|
|
1887
|
+
ariaLabelCloseList = _ref.ariaLabelCloseList,
|
|
1888
|
+
_ref$ariaLabelJumpToI = _ref.ariaLabelJumpToInput,
|
|
1889
|
+
ariaLabelJumpToInput = _ref$ariaLabelJumpToI === void 0 ? selectedItems.length + " valgte elementer, trykk for \xE5 hoppe til tekstfeltet" : _ref$ariaLabelJumpToI,
|
|
1890
|
+
ariaLabelOpenList = _ref.ariaLabelOpenList,
|
|
1891
|
+
_ref$ariaLabelRemoveS = _ref.ariaLabelRemoveSelected,
|
|
1892
|
+
ariaLabelRemoveSelected = _ref$ariaLabelRemoveS === void 0 ? 'trykk for å fjerne valg' : _ref$ariaLabelRemoveS,
|
|
1893
|
+
_ref$ariaLabelSelecte = _ref.ariaLabelSelectedItem,
|
|
1894
|
+
ariaLabelSelectedItem = _ref$ariaLabelSelecte === void 0 ? ', valgt element, trykk for å fjerne' : _ref$ariaLabelSelecte,
|
|
1895
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$2);
|
|
1896
|
+
var _React$useState = React.useState(0),
|
|
1897
|
+
lastHighlightedIndex = _React$useState[0],
|
|
1898
|
+
setLastHighlightedIndex = _React$useState[1];
|
|
1899
|
+
var _React$useState2 = React.useState(undefined),
|
|
1900
|
+
lastRemovedItem = _React$useState2[0],
|
|
1901
|
+
setLastRemovedItem = _React$useState2[1];
|
|
1902
|
+
var inputRef = useRef(null);
|
|
1903
|
+
var _useResolvedItems = useResolvedItems(initialItems, debounceTimeout),
|
|
1904
|
+
normalizedItems = _useResolvedItems.items,
|
|
1905
|
+
loading = _useResolvedItems.loading,
|
|
1906
|
+
fetchItems = _useResolvedItems.fetchItems;
|
|
1907
|
+
var isAllNonAsyncItemsSelected = typeof initialItems !== 'function' && selectedItems.length === normalizedItems.length;
|
|
1908
|
+
// special 'item' used as Select All entry in the dropdown list
|
|
1909
|
+
var selectAll = {
|
|
1910
|
+
value: useRandomId('select-all'),
|
|
1911
|
+
label: labelSelectAll
|
|
1912
|
+
};
|
|
1913
|
+
// special 'item' used as a replacement selected item tag for when
|
|
1914
|
+
// there are more selected element than maxTags
|
|
1915
|
+
var summarySelectedItems = React.useMemo(function () {
|
|
1916
|
+
return {
|
|
1917
|
+
value: EMPTY_INPUT,
|
|
1918
|
+
label: isAllNonAsyncItemsSelected ? labelAllItemsSelected : selectedItems.length + ' ' + ariaLabelChosenPlural
|
|
1919
|
+
};
|
|
1920
|
+
}, [isAllNonAsyncItemsSelected, selectedItems, labelAllItemsSelected, ariaLabelChosenPlural]);
|
|
1921
|
+
var _useState = useState([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems)),
|
|
1922
|
+
listItems = _useState[0],
|
|
1923
|
+
setListItems = _useState[1];
|
|
1924
|
+
var filterListItems = function filterListItems(_ref2) {
|
|
1925
|
+
var inputValue = _ref2.inputValue;
|
|
1926
|
+
return setListItems([].concat(!hideSelectAll ? [selectAll] : [], normalizedItems.filter(function (item) {
|
|
1927
|
+
return itemFilter(item, inputValue);
|
|
1928
|
+
})));
|
|
1929
|
+
};
|
|
1930
|
+
var updateListItems = function updateListItems(_ref3) {
|
|
1931
|
+
var inputValue = _ref3.inputValue;
|
|
1932
|
+
if (typeof initialItems === 'function') fetchItems(inputValue != null ? inputValue : EMPTY_INPUT); // fetch items only if user provides a function as items
|
|
1933
|
+
filterListItems({
|
|
1934
|
+
inputValue: inputValue != null ? inputValue : EMPTY_INPUT
|
|
1935
|
+
});
|
|
1936
|
+
};
|
|
1937
|
+
React.useEffect(function () {
|
|
1938
|
+
filterListItems({
|
|
1939
|
+
inputValue: inputValue
|
|
1940
|
+
});
|
|
1941
|
+
}, [normalizedItems]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
1942
|
+
var _useMultiselectUtils = useMultiselectUtils({
|
|
1943
|
+
listItems: listItems,
|
|
1944
|
+
selectAll: selectAll,
|
|
1945
|
+
selectedItems: selectedItems
|
|
1946
|
+
}),
|
|
1947
|
+
hasSelectedItems = _useMultiselectUtils.hasSelectedItems,
|
|
1948
|
+
handleListItemClicked = _useMultiselectUtils.handleListItemClicked,
|
|
1949
|
+
selectAllCheckboxState = _useMultiselectUtils.selectAllCheckboxState;
|
|
1950
|
+
var _useMultipleSelection = useMultipleSelection({
|
|
1951
|
+
selectedItems: selectedItems,
|
|
1952
|
+
itemToString: itemToString,
|
|
1953
|
+
// Accessibility
|
|
1954
|
+
getA11yRemovalMessage: function getA11yRemovalMessage$1(options) {
|
|
1955
|
+
return getA11yRemovalMessage(_extends({}, options, {
|
|
1956
|
+
selectAllItem: selectAll,
|
|
1957
|
+
removedItem: lastRemovedItem
|
|
1958
|
+
}));
|
|
1959
|
+
}
|
|
1960
|
+
}),
|
|
1961
|
+
getSelectedItemProps = _useMultipleSelection.getSelectedItemProps,
|
|
1962
|
+
getDropdownProps = _useMultipleSelection.getDropdownProps;
|
|
1963
|
+
var stateReducer = React.useCallback(function (_, _ref4) {
|
|
1964
|
+
var changes = _ref4.changes,
|
|
1965
|
+
type = _ref4.type;
|
|
1966
|
+
if (changes.highlightedIndex !== undefined && (changes == null ? void 0 : changes.highlightedIndex) >= 0) {
|
|
1967
|
+
setLastHighlightedIndex(changes == null ? void 0 : changes.highlightedIndex);
|
|
1968
|
+
}
|
|
1969
|
+
switch (type) {
|
|
1970
|
+
// keep menu open and edit input value on item selection
|
|
1971
|
+
case useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
1972
|
+
case useCombobox.stateChangeTypes.ItemClick:
|
|
1973
|
+
{
|
|
1974
|
+
var _inputRef$current$val, _inputRef$current;
|
|
1975
|
+
if (clearInputOnSelect) {
|
|
1976
|
+
updateListItems({
|
|
1977
|
+
inputValue: EMPTY_INPUT
|
|
1978
|
+
});
|
|
1979
|
+
}
|
|
1980
|
+
return _extends({}, changes, {
|
|
1981
|
+
isOpen: true,
|
|
1982
|
+
inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val = inputRef == null ? void 0 : (_inputRef$current = inputRef.current) == null ? void 0 : _inputRef$current.value) != null ? _inputRef$current$val : EMPTY_INPUT
|
|
1983
|
+
});
|
|
1984
|
+
}
|
|
1985
|
+
// edit input value when selected items is updated outside component
|
|
1986
|
+
case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:
|
|
1987
|
+
{
|
|
1988
|
+
var _inputRef$current$val2, _inputRef$current2;
|
|
1989
|
+
return _extends({}, changes, {
|
|
1990
|
+
inputValue: clearInputOnSelect ? EMPTY_INPUT : (_inputRef$current$val2 = inputRef == null ? void 0 : (_inputRef$current2 = inputRef.current) == null ? void 0 : _inputRef$current2.value) != null ? _inputRef$current$val2 : EMPTY_INPUT
|
|
1991
|
+
});
|
|
1992
|
+
}
|
|
1993
|
+
// remove leading whitespace, select item with spacebar if input is empty and filter list items
|
|
1994
|
+
case useCombobox.stateChangeTypes.InputChange:
|
|
1995
|
+
{
|
|
1996
|
+
var _changes$inputValue;
|
|
1997
|
+
var leadingWhitespaceTest = /^\s+/g;
|
|
1998
|
+
var isSpacePressedOnEmptyInput = changes.inputValue === ' ';
|
|
1999
|
+
if ((_changes$inputValue = changes.inputValue) != null && _changes$inputValue.match(leadingWhitespaceTest)) {
|
|
2000
|
+
setInputValue(changes.inputValue.replace(leadingWhitespaceTest, EMPTY_INPUT));
|
|
2001
|
+
if (isSpacePressedOnEmptyInput) {
|
|
2002
|
+
openMenu();
|
|
2003
|
+
if (isOpen && changes.highlightedIndex !== undefined) {
|
|
2004
|
+
handleListItemClicked({
|
|
2005
|
+
clickedItem: listItems[changes.highlightedIndex],
|
|
2006
|
+
onChange: onChange,
|
|
2007
|
+
setLastRemovedItem: setLastRemovedItem
|
|
2008
|
+
});
|
|
2009
|
+
}
|
|
2010
|
+
}
|
|
2011
|
+
} else {
|
|
2012
|
+
updateListItems({
|
|
2013
|
+
inputValue: changes.inputValue
|
|
2014
|
+
});
|
|
2015
|
+
}
|
|
2016
|
+
return changes;
|
|
2017
|
+
}
|
|
2018
|
+
// reset input value when leaving input field
|
|
2019
|
+
case useCombobox.stateChangeTypes.InputBlur:
|
|
2020
|
+
{
|
|
2021
|
+
return _extends({}, changes, {
|
|
2022
|
+
inputValue: EMPTY_INPUT
|
|
2023
|
+
});
|
|
2024
|
+
}
|
|
2025
|
+
default:
|
|
2026
|
+
return changes;
|
|
2027
|
+
}
|
|
2028
|
+
}, [hideSelectAll, normalizedItems, filterListItems, initialItems]);
|
|
2029
|
+
var _useCombobox = useCombobox(_extends({
|
|
2030
|
+
defaultHighlightedIndex: lastHighlightedIndex,
|
|
2031
|
+
items: listItems,
|
|
2032
|
+
itemToString: itemToString,
|
|
2033
|
+
selectedItem: null,
|
|
2034
|
+
stateReducer: stateReducer,
|
|
2035
|
+
onStateChange: function onStateChange(_ref5) {
|
|
2036
|
+
var type = _ref5.type,
|
|
2037
|
+
clickedItem = _ref5.selectedItem;
|
|
2038
|
+
// clickedItem means item chosen either via mouse or keyboard
|
|
2039
|
+
if (!clickedItem) return;
|
|
2040
|
+
switch (type) {
|
|
2041
|
+
// @ts-expect-error This falltrough is wanted
|
|
2042
|
+
case useCombobox.stateChangeTypes.InputBlur:
|
|
2043
|
+
if (!selectOnBlur) break;
|
|
2044
|
+
case useCombobox.stateChangeTypes.InputKeyDownEnter: // eslint-disable-line no-fallthrough
|
|
2045
|
+
case useCombobox.stateChangeTypes.ItemClick:
|
|
2046
|
+
{
|
|
2047
|
+
handleListItemClicked({
|
|
2048
|
+
clickedItem: clickedItem,
|
|
2049
|
+
onChange: onChange,
|
|
2050
|
+
setLastRemovedItem: setLastRemovedItem
|
|
2051
|
+
});
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
},
|
|
2055
|
+
// Accessibility
|
|
2056
|
+
getA11yStatusMessage: function getA11yStatusMessage$1(options) {
|
|
2057
|
+
return getA11yStatusMessage(_extends({}, options, {
|
|
2058
|
+
selectAllItemIncluded: !hideSelectAll
|
|
2059
|
+
}));
|
|
2060
|
+
},
|
|
2061
|
+
// The following A11y-helper does not work due to a bug (https://github.com/downshift-js/downshift/issues/1227)
|
|
2062
|
+
// but is left here for when it is fixed
|
|
2063
|
+
getA11ySelectionMessage: function getA11ySelectionMessage$1(options) {
|
|
2064
|
+
return getA11ySelectionMessage(_extends({}, options, {
|
|
2065
|
+
selectAllItem: selectAll
|
|
2066
|
+
}));
|
|
2067
|
+
}
|
|
2068
|
+
}, rest)),
|
|
2069
|
+
getInputProps = _useCombobox.getInputProps,
|
|
2070
|
+
getItemProps = _useCombobox.getItemProps,
|
|
2071
|
+
getLabelProps = _useCombobox.getLabelProps,
|
|
2072
|
+
getMenuProps = _useCombobox.getMenuProps,
|
|
2073
|
+
getToggleButtonProps = _useCombobox.getToggleButtonProps,
|
|
2074
|
+
highlightedIndex = _useCombobox.highlightedIndex,
|
|
2075
|
+
inputValue = _useCombobox.inputValue,
|
|
2076
|
+
isOpen = _useCombobox.isOpen,
|
|
2077
|
+
openMenu = _useCombobox.openMenu,
|
|
2078
|
+
setInputValue = _useCombobox.setInputValue;
|
|
2079
|
+
var handleOnClear = function handleOnClear() {
|
|
2080
|
+
var _inputRef$current3;
|
|
2081
|
+
onChange([]);
|
|
2082
|
+
setInputValue(EMPTY_INPUT);
|
|
2083
|
+
(_inputRef$current3 = inputRef.current) == null ? void 0 : _inputRef$current3.focus();
|
|
2084
|
+
updateListItems({
|
|
2085
|
+
inputValue: inputValue
|
|
2086
|
+
});
|
|
2087
|
+
};
|
|
1451
2088
|
return React.createElement("div", {
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
2089
|
+
className: "eds-dropdown__wrapper"
|
|
2090
|
+
}, React.createElement(BaseFormControl, _extends({
|
|
2091
|
+
append: React.createElement(FieldAppend$1, {
|
|
2092
|
+
ariaLabelCloseList: ariaLabelCloseList,
|
|
2093
|
+
ariaLabelOpenList: ariaLabelOpenList,
|
|
2094
|
+
selectedItems: selectedItems,
|
|
2095
|
+
isOpen: isOpen,
|
|
2096
|
+
clearable: clearable,
|
|
2097
|
+
labelClearSelectedItems: labelClearAllItems,
|
|
2098
|
+
focusable: false,
|
|
2099
|
+
loading: loading,
|
|
2100
|
+
loadingText: loadingText,
|
|
2101
|
+
disabled: readOnly || disabled,
|
|
2102
|
+
onClear: handleOnClear,
|
|
2103
|
+
getToggleButtonProps: getToggleButtonProps
|
|
2104
|
+
}),
|
|
2105
|
+
className: classNames('eds-dropdown', className),
|
|
2106
|
+
disabled: disabled,
|
|
2107
|
+
feedback: feedback,
|
|
2108
|
+
isFilled: hasSelectedItems || inputValue !== EMPTY_INPUT,
|
|
2109
|
+
label: label,
|
|
2110
|
+
labelId: getLabelProps().id,
|
|
2111
|
+
labelProps: getLabelProps(),
|
|
2112
|
+
readOnly: readOnly,
|
|
2113
|
+
style: style,
|
|
2114
|
+
variant: variant
|
|
2115
|
+
}, rest), React.createElement("div", {
|
|
2116
|
+
className: classNames('eds-dropdown__selected-items-and-input', {
|
|
2117
|
+
'eds-dropdown__selected-items-and-input--filled': hasSelectedItems
|
|
2118
|
+
}),
|
|
2119
|
+
onClick: function onClick(e) {
|
|
2120
|
+
var _inputRef$current4;
|
|
2121
|
+
if (e.target === e.currentTarget) (_inputRef$current4 = inputRef.current) == null ? void 0 : _inputRef$current4.focus();
|
|
1455
2122
|
}
|
|
1456
|
-
},
|
|
1457
|
-
className: "eds-searchable-dropdown-appendix__clear-button",
|
|
1458
|
-
type: "button",
|
|
1459
|
-
tabIndex: -1,
|
|
2123
|
+
}, selectedItems.length < maxTags ? React.createElement(React.Fragment, null, selectedItems.length > 1 ? React.createElement(VisuallyHidden, {
|
|
1460
2124
|
onClick: function onClick() {
|
|
1461
|
-
|
|
2125
|
+
var _inputRef$current5;
|
|
2126
|
+
return (_inputRef$current5 = inputRef.current) == null ? void 0 : _inputRef$current5.focus();
|
|
1462
2127
|
}
|
|
1463
|
-
}, React.createElement(
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
2128
|
+
}, ariaLabelJumpToInput) : React.createElement(React.Fragment, null), selectedItems.map(function (selectedItem, index) {
|
|
2129
|
+
return React.createElement(SelectedItemTag, {
|
|
2130
|
+
ariaLabelChosen: ariaLabelChosenSingular,
|
|
2131
|
+
ariaLabelRemoveSelected: ariaLabelRemoveSelected,
|
|
2132
|
+
disabled: disabled,
|
|
2133
|
+
getSelectedItemProps: getSelectedItemProps,
|
|
2134
|
+
index: index,
|
|
2135
|
+
key: selectedItem.value,
|
|
2136
|
+
readOnly: readOnly,
|
|
2137
|
+
removeSelectedItem: function removeSelectedItem() {
|
|
2138
|
+
var _inputRef$current6;
|
|
2139
|
+
handleListItemClicked({
|
|
2140
|
+
clickedItem: selectedItem,
|
|
2141
|
+
onChange: onChange,
|
|
2142
|
+
setLastRemovedItem: setLastRemovedItem
|
|
2143
|
+
});
|
|
2144
|
+
inputRef == null ? void 0 : (_inputRef$current6 = inputRef.current) == null ? void 0 : _inputRef$current6.focus();
|
|
2145
|
+
},
|
|
2146
|
+
selectedItem: selectedItem
|
|
2147
|
+
});
|
|
2148
|
+
})) : React.createElement(SelectedItemTag, {
|
|
2149
|
+
ariaLabelRemoveSelected: labelClearAllItems,
|
|
2150
|
+
ariaLabelChosen: "",
|
|
2151
|
+
disabled: disabled,
|
|
2152
|
+
readOnly: readOnly,
|
|
2153
|
+
removeSelectedItem: handleOnClear,
|
|
2154
|
+
selectedItem: summarySelectedItems
|
|
2155
|
+
}), React.createElement("input", _extends({
|
|
2156
|
+
placeholder: placeholder,
|
|
2157
|
+
className: "eds-dropdown__input eds-form-control",
|
|
2158
|
+
disabled: readOnly || disabled
|
|
2159
|
+
}, getInputProps(getDropdownProps({
|
|
2160
|
+
onClick: function onClick(e) {
|
|
2161
|
+
if (!isOpen && isVoiceOverClick(e)) openMenu();
|
|
2162
|
+
},
|
|
2163
|
+
preventKeyAction: isOpen,
|
|
2164
|
+
ref: inputRef,
|
|
2165
|
+
value: inputValue != null ? inputValue : EMPTY_INPUT
|
|
2166
|
+
})))))), React.createElement(DropdownList, {
|
|
2167
|
+
ariaLabelChosenSingular: ariaLabelChosenSingular,
|
|
2168
|
+
ariaLabelSelectedItem: ariaLabelSelectedItem,
|
|
2169
|
+
getItemProps: getItemProps,
|
|
2170
|
+
getMenuProps: getMenuProps,
|
|
2171
|
+
highlightedIndex: highlightedIndex,
|
|
2172
|
+
inputValue: inputValue,
|
|
2173
|
+
isOpen: isOpen,
|
|
2174
|
+
listItems: listItems,
|
|
2175
|
+
listStyle: listStyle,
|
|
2176
|
+
loading: loading,
|
|
2177
|
+
loadingText: loadingText,
|
|
2178
|
+
selectAllCheckboxState: selectAllCheckboxState,
|
|
2179
|
+
selectAllItem: selectAll,
|
|
2180
|
+
selectedItems: selectedItems
|
|
2181
|
+
}));
|
|
2182
|
+
};
|
|
2183
|
+
|
|
2184
|
+
var _excluded$1 = ["ariaLabelCloseList", "ariaLabelOpenList", "className", "clearable", "disabled", "disableLabelAnimation", "feedback", "items", "label", "labelClearSelectedItem", "listStyle", "loadingText", "onChange", "placeholder", "prepend", "readOnly", "selectedItem", "selectOnBlur", "style", "variant"];
|
|
2185
|
+
var Dropdown = function Dropdown(_ref) {
|
|
2186
|
+
var _ref3, _selectedItem$label;
|
|
2187
|
+
var ariaLabelCloseList = _ref.ariaLabelCloseList,
|
|
2188
|
+
ariaLabelOpenList = _ref.ariaLabelOpenList,
|
|
2189
|
+
className = _ref.className,
|
|
2190
|
+
_ref$clearable = _ref.clearable,
|
|
2191
|
+
clearable = _ref$clearable === void 0 ? false : _ref$clearable,
|
|
2192
|
+
_ref$disabled = _ref.disabled,
|
|
2193
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
2194
|
+
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
2195
|
+
feedback = _ref.feedback,
|
|
2196
|
+
initialItems = _ref.items,
|
|
2197
|
+
label = _ref.label,
|
|
2198
|
+
_ref$labelClearSelect = _ref.labelClearSelectedItem,
|
|
2199
|
+
labelClearSelectedItem = _ref$labelClearSelect === void 0 ? 'fjern valgt' : _ref$labelClearSelect,
|
|
2200
|
+
listStyle = _ref.listStyle,
|
|
2201
|
+
loadingText = _ref.loadingText,
|
|
2202
|
+
onChange = _ref.onChange,
|
|
2203
|
+
placeholder = _ref.placeholder,
|
|
2204
|
+
prepend = _ref.prepend,
|
|
2205
|
+
_ref$readOnly = _ref.readOnly,
|
|
2206
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
2207
|
+
selectedItem = _ref.selectedItem,
|
|
2208
|
+
_ref$selectOnBlur = _ref.selectOnBlur,
|
|
2209
|
+
selectOnBlur = _ref$selectOnBlur === void 0 ? false : _ref$selectOnBlur,
|
|
2210
|
+
style = _ref.style,
|
|
2211
|
+
_ref$variant = _ref.variant,
|
|
2212
|
+
variant = _ref$variant === void 0 ? 'info' : _ref$variant,
|
|
2213
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded$1);
|
|
2214
|
+
var _useResolvedItems = useResolvedItems(initialItems),
|
|
2215
|
+
normalizedItems = _useResolvedItems.items,
|
|
2216
|
+
loading = _useResolvedItems.loading;
|
|
2217
|
+
var isFilled = selectedItem !== null || placeholder !== undefined;
|
|
2218
|
+
var _useSelect = useSelect({
|
|
2219
|
+
items: normalizedItems,
|
|
2220
|
+
defaultHighlightedIndex: selectedItem ? undefined : 0,
|
|
2221
|
+
selectedItem: selectedItem,
|
|
2222
|
+
onStateChange: function onStateChange(_ref2) {
|
|
2223
|
+
var type = _ref2.type,
|
|
2224
|
+
clickedItem = _ref2.selectedItem;
|
|
2225
|
+
switch (type) {
|
|
2226
|
+
// @ts-expect-error This falltrough is wanted
|
|
2227
|
+
case useSelect.stateChangeTypes.ToggleButtonBlur:
|
|
2228
|
+
if (!selectOnBlur) break;
|
|
2229
|
+
case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter: // eslint-disable-line no-fallthrough
|
|
2230
|
+
case useSelect.stateChangeTypes.ItemClick:
|
|
2231
|
+
{
|
|
2232
|
+
onChange == null ? void 0 : onChange(clickedItem !== undefined ? clickedItem : null);
|
|
2233
|
+
}
|
|
2234
|
+
}
|
|
2235
|
+
},
|
|
2236
|
+
itemToString: itemToString
|
|
2237
|
+
}),
|
|
2238
|
+
isOpen = _useSelect.isOpen,
|
|
2239
|
+
getItemProps = _useSelect.getItemProps,
|
|
2240
|
+
getLabelProps = _useSelect.getLabelProps,
|
|
2241
|
+
getMenuProps = _useSelect.getMenuProps,
|
|
2242
|
+
getToggleButtonProps = _useSelect.getToggleButtonProps,
|
|
2243
|
+
highlightedIndex = _useSelect.highlightedIndex;
|
|
2244
|
+
return React.createElement("div", {
|
|
2245
|
+
className: "eds-dropdown__wrapper"
|
|
2246
|
+
}, React.createElement(BaseFormControl, _extends({
|
|
2247
|
+
append: React.createElement(FieldAppend$1, {
|
|
2248
|
+
ariaHiddenToggleButton: true,
|
|
2249
|
+
ariaLabelCloseList: ariaLabelCloseList,
|
|
2250
|
+
ariaLabelOpenList: ariaLabelOpenList,
|
|
2251
|
+
clearable: clearable,
|
|
2252
|
+
labelClearSelectedItems: labelClearSelectedItem,
|
|
2253
|
+
focusable: false,
|
|
2254
|
+
getToggleButtonProps: getToggleButtonProps,
|
|
2255
|
+
isOpen: isOpen,
|
|
2256
|
+
loading: loading,
|
|
2257
|
+
loadingText: loadingText,
|
|
2258
|
+
onClear: function onClear() {
|
|
2259
|
+
onChange == null ? void 0 : onChange(null);
|
|
2260
|
+
},
|
|
2261
|
+
disabled: readOnly || disabled,
|
|
2262
|
+
selectedItems: [selectedItem]
|
|
2263
|
+
}),
|
|
2264
|
+
className: classNames('eds-dropdown', className, {
|
|
2265
|
+
'eds-dropdown--not-filled': !isFilled
|
|
2266
|
+
}),
|
|
2267
|
+
disabled: disabled,
|
|
2268
|
+
disableLabelAnimation: disableLabelAnimation,
|
|
2269
|
+
feedback: feedback,
|
|
2270
|
+
isFilled: isFilled,
|
|
2271
|
+
label: label,
|
|
2272
|
+
labelId: getLabelProps().id,
|
|
2273
|
+
labelProps: getLabelProps(),
|
|
2274
|
+
prepend: prepend,
|
|
2275
|
+
readOnly: readOnly,
|
|
2276
|
+
style: style,
|
|
2277
|
+
variant: variant
|
|
2278
|
+
}, rest), React.createElement("div", _extends({
|
|
2279
|
+
className: "eds-dropdown__selected-item-button"
|
|
2280
|
+
}, getToggleButtonProps({
|
|
2281
|
+
id: undefined
|
|
2282
|
+
})), (_ref3 = (_selectedItem$label = selectedItem == null ? void 0 : selectedItem.label) != null ? _selectedItem$label : React.createElement("span", {
|
|
2283
|
+
className: classNames('eds-dropdown__selected-item-button__placeholder', {
|
|
2284
|
+
'eds-dropdown__selected-item-button__placeholder--readonly': readOnly
|
|
1468
2285
|
})
|
|
1469
|
-
}), {
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
2286
|
+
}, placeholder)) != null ? _ref3 : '')), React.createElement(DropdownList, {
|
|
2287
|
+
getItemProps: getItemProps,
|
|
2288
|
+
getMenuProps: getMenuProps,
|
|
2289
|
+
highlightedIndex: highlightedIndex,
|
|
2290
|
+
isOpen: isOpen,
|
|
2291
|
+
listItems: normalizedItems,
|
|
2292
|
+
listStyle: listStyle,
|
|
2293
|
+
loading: loading,
|
|
2294
|
+
loadingText: loadingText,
|
|
2295
|
+
selectedItems: selectedItem !== null ? [selectedItem] : []
|
|
2296
|
+
}));
|
|
2297
|
+
};
|
|
2298
|
+
|
|
2299
|
+
var _excluded = ["className", "disabled", "disableLabelAnimation", "feedback", "items", "label", "loadingText", "onChange", "prepend", "readOnly", "selectedItem", "style", "value", "variant"];
|
|
2300
|
+
var NativeDropdown = function NativeDropdown(_ref) {
|
|
2301
|
+
var _ref2;
|
|
2302
|
+
var className = _ref.className,
|
|
2303
|
+
_ref$disabled = _ref.disabled,
|
|
2304
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
2305
|
+
disableLabelAnimation = _ref.disableLabelAnimation,
|
|
2306
|
+
feedback = _ref.feedback,
|
|
2307
|
+
items = _ref.items,
|
|
2308
|
+
label = _ref.label,
|
|
2309
|
+
loadingText = _ref.loadingText,
|
|
2310
|
+
_onChange = _ref.onChange,
|
|
2311
|
+
prepend = _ref.prepend,
|
|
2312
|
+
_ref$readOnly = _ref.readOnly,
|
|
2313
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
2314
|
+
selectedItem = _ref.selectedItem,
|
|
2315
|
+
style = _ref.style,
|
|
2316
|
+
value = _ref.value,
|
|
2317
|
+
variant = _ref.variant,
|
|
2318
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
2319
|
+
var _useResolvedItems = useResolvedItems(items),
|
|
2320
|
+
normalizedItems = _useResolvedItems.items,
|
|
2321
|
+
loading = _useResolvedItems.loading;
|
|
2322
|
+
var nativeDropdownId = useRandomId('eds-dropdown-native');
|
|
2323
|
+
return React.createElement(BaseFormControl, {
|
|
2324
|
+
disabled: disabled,
|
|
2325
|
+
readOnly: readOnly,
|
|
2326
|
+
prepend: prepend,
|
|
2327
|
+
append: React.createElement(FieldAppend, {
|
|
2328
|
+
hidden: disabled || readOnly,
|
|
2329
|
+
loading: loading,
|
|
2330
|
+
loadingText: loadingText
|
|
2331
|
+
}),
|
|
2332
|
+
className: className,
|
|
2333
|
+
style: style,
|
|
2334
|
+
label: label,
|
|
2335
|
+
labelId: nativeDropdownId,
|
|
2336
|
+
variant: variant,
|
|
2337
|
+
feedback: feedback,
|
|
2338
|
+
disableLabelAnimation: disableLabelAnimation,
|
|
2339
|
+
isFilled: true
|
|
2340
|
+
}, React.createElement("select", _extends({
|
|
2341
|
+
"aria-invalid": variant === 'error',
|
|
2342
|
+
"aria-labelledby": nativeDropdownId,
|
|
2343
|
+
"aria-busy": loading,
|
|
2344
|
+
className: "eds-form-control eds-dropdown--native",
|
|
2345
|
+
disabled: disabled || readOnly,
|
|
2346
|
+
onChange: function onChange(event) {
|
|
2347
|
+
var _normalizedItems$find;
|
|
2348
|
+
_onChange == null ? void 0 : _onChange({
|
|
2349
|
+
value: event.target.value,
|
|
2350
|
+
selectedItem: (_normalizedItems$find = normalizedItems.find(function (item) {
|
|
2351
|
+
return item.value === event.target.value;
|
|
2352
|
+
})) != null ? _normalizedItems$find : null,
|
|
2353
|
+
target: event.target
|
|
2354
|
+
});
|
|
2355
|
+
},
|
|
2356
|
+
value: (_ref2 = value != null ? value : selectedItem == null ? void 0 : selectedItem.value) != null ? _ref2 : undefined
|
|
2357
|
+
}, rest), normalizedItems.map(function (item) {
|
|
2358
|
+
return React.createElement("option", {
|
|
2359
|
+
key: item.value,
|
|
2360
|
+
value: item.value
|
|
2361
|
+
}, item.label);
|
|
2362
|
+
})));
|
|
2363
|
+
};
|
|
2364
|
+
var FieldAppend = function FieldAppend(_ref3) {
|
|
2365
|
+
var loading = _ref3.loading,
|
|
2366
|
+
loadingText = _ref3.loadingText,
|
|
2367
|
+
hidden = _ref3.hidden;
|
|
2368
|
+
if (loading) {
|
|
2369
|
+
return React.createElement("div", {
|
|
2370
|
+
className: "eds-dropdown-native__loading-dots"
|
|
2371
|
+
}, React.createElement(LoadingDots, {
|
|
2372
|
+
"aria-label": loadingText
|
|
2373
|
+
}));
|
|
2374
|
+
}
|
|
2375
|
+
if (hidden) {
|
|
2376
|
+
return React.createElement(React.Fragment, null);
|
|
2377
|
+
}
|
|
2378
|
+
return React.createElement(DownArrowIcon, {
|
|
2379
|
+
inline: true
|
|
2380
|
+
});
|
|
1473
2381
|
};
|
|
1474
2382
|
|
|
1475
2383
|
warnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');
|
|
1476
2384
|
|
|
1477
|
-
export { Dropdown, MultiSelect, NativeDropdown,
|
|
2385
|
+
export { Dropdown, DropdownDeprecated, MultiSelect, MultiSelectDeprecated, NativeDropdown, SearchableDropdown };
|
|
1478
2386
|
//# sourceMappingURL=dropdown.esm.js.map
|