@dreamcommerce/aurora 2.6.10 → 2.6.11

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.
@@ -7,6 +7,7 @@ var index = require('../context/index.js');
7
7
  var css_classes = require('../../controls/css_classes.js');
8
8
  var main_module$1 = require('../../../css/input/main.module.less.js');
9
9
  var main_module = require('../../../css/dropdown/main.module.less.js');
10
+ var utilities = require('../utilities.js');
10
11
  var use_keyboard_open_close = require('../hooks/use_keyboard_open_close.js');
11
12
  var icon_close = require('../../../assets/icon_close.js');
12
13
  var input_wrapper = require('../../controls/components/input_wrapper.js');
@@ -43,14 +44,18 @@ selectedOptions, placeholder, onRemoveOptions, hasCloseIcon }) => {
43
44
  * get values from dropdown context
44
45
  */
45
46
  const { isOpen, toggleDropdown } = index.useDropdownContext();
47
+ /**
48
+ * filter options if there are more than one with the same value
49
+ */
50
+ const filteredOptions = utilities.filterOptionDuplicatesByProperty(selectedOptions, 'value');
46
51
  /**
47
52
  * value for display purposes, its texts not actual values from options
48
53
  */
49
- const value = selectedOptions.map((option) => option.text).join(', ');
54
+ const value = filteredOptions.map((option) => option.text).join(', ');
50
55
  /**
51
56
  * disabled options should have hidden inputs with values rendered
52
57
  */
53
- const notDisabled = selectedOptions.filter((option) => !option.isDisabled);
58
+ const notDisabled = filteredOptions.filter((option) => !option.isDisabled);
54
59
  const $hiddenInputs = notDisabled.map((option) => (React__default['default'].createElement("input", { key: option.value, type: "hidden", name: name, value: option.value, disabled: isDisabled, readOnly: isReadonly })));
55
60
  use_keyboard_open_close.useKeyboardOpenClose(toggleDropdown, isOpen, ref);
56
61
  const handleOnClick = (ev) => {
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -117,9 +117,9 @@ portalContainer, placeholder, onScroll, innerAdditionalContent, hasCloseIcon })
117
117
  React__default['default'].createElement(index$1['default'].Content, { portalContainer: portalContainer },
118
118
  isWithSearch && React__default['default'].createElement(index$1['default'].Search, { onKeyUp: (ev) => utilities.handleSearchKeyUp(ev, options, setOptionsList) }),
119
119
  React__default['default'].createElement(index$1['default'].List, { isWithGroups: isWithGroups, onScroll: onScroll }, optionsList === null || optionsList === void 0 ? void 0 :
120
- optionsList.map((option) => {
120
+ optionsList.map((option, index) => {
121
121
  var _a, _b;
122
- return option.isHeader ? (React__default['default'].createElement(index$1['default'].Header, { key: option.text, text: option.text })) : (React__default['default'].createElement(index$1['default'].Option, { key: option.value, option: option, isSelected: utilities.isSelected(option, selectedValues), isDisabled: (_a = option.isDisabled) !== null && _a !== void 0 ? _a : isDisabled, isReadonly: (_b = option.isReadonly) !== null && _b !== void 0 ? _b : isReadonly, onClick: (option) => utilities.handleItemClick(option, defaultCloseOnClick, setSelectedValues, toggleDropdown) }));
122
+ return option.isHeader ? (React__default['default'].createElement(index$1['default'].Header, { key: option.text, text: option.text })) : (React__default['default'].createElement(index$1['default'].Option, { key: `${option.value}-${index}`, option: option, isSelected: utilities.isSelected(option, selectedValues), isDisabled: (_a = option.isDisabled) !== null && _a !== void 0 ? _a : isDisabled, isReadonly: (_b = option.isReadonly) !== null && _b !== void 0 ? _b : isReadonly, onClick: (option) => utilities.handleItemClick(option, defaultCloseOnClick, setSelectedValues, toggleDropdown) }));
123
123
  }),
124
124
  innerAdditionalContent)))));
125
125
  };
@@ -72,8 +72,21 @@ const isChildOfModal = (ref) => {
72
72
  };
73
73
  const getBounding = (element) => {
74
74
  return element.getBoundingClientRect();
75
+ };
76
+ const filterOptionDuplicatesByProperty = (options, property) => {
77
+ const uniqueProperties = [];
78
+ const filteredOptions = options.filter((option) => {
79
+ const isDuplicate = uniqueProperties.includes(option[property]);
80
+ if (!isDuplicate) {
81
+ uniqueProperties.push(option[property]);
82
+ return true;
83
+ }
84
+ return false;
85
+ });
86
+ return filteredOptions;
75
87
  };
76
88
 
89
+ exports.filterOptionDuplicatesByProperty = filterOptionDuplicatesByProperty;
77
90
  exports.getBounding = getBounding;
78
91
  exports.getXYModifiersForNestedDropdowns = getXYModifiersForNestedDropdowns;
79
92
  exports.handleItemClick = handleItemClick;
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -3,6 +3,7 @@ import { useDropdownContext } from '../context/index.js';
3
3
  import { cssControlInputRemoveButton } from '../../controls/css_classes.js';
4
4
  import inputCssClasses from '../../../css/input/main.module.less.js';
5
5
  import cssClasses from '../../../css/dropdown/main.module.less.js';
6
+ import { filterOptionDuplicatesByProperty } from '../utilities.js';
6
7
  import { useKeyboardOpenClose } from '../hooks/use_keyboard_open_close.js';
7
8
  import IconClose from '../../../assets/icon_close.js';
8
9
  import InputWrapper from '../../controls/components/input_wrapper.js';
@@ -35,14 +36,18 @@ selectedOptions, placeholder, onRemoveOptions, hasCloseIcon }) => {
35
36
  * get values from dropdown context
36
37
  */
37
38
  const { isOpen, toggleDropdown } = useDropdownContext();
39
+ /**
40
+ * filter options if there are more than one with the same value
41
+ */
42
+ const filteredOptions = filterOptionDuplicatesByProperty(selectedOptions, 'value');
38
43
  /**
39
44
  * value for display purposes, its texts not actual values from options
40
45
  */
41
- const value = selectedOptions.map((option) => option.text).join(', ');
46
+ const value = filteredOptions.map((option) => option.text).join(', ');
42
47
  /**
43
48
  * disabled options should have hidden inputs with values rendered
44
49
  */
45
- const notDisabled = selectedOptions.filter((option) => !option.isDisabled);
50
+ const notDisabled = filteredOptions.filter((option) => !option.isDisabled);
46
51
  const $hiddenInputs = notDisabled.map((option) => (React.createElement("input", { key: option.value, type: "hidden", name: name, value: option.value, disabled: isDisabled, readOnly: isReadonly })));
47
52
  useKeyboardOpenClose(toggleDropdown, isOpen, ref);
48
53
  const handleOnClick = (ev) => {
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
@@ -109,9 +109,9 @@ portalContainer, placeholder, onScroll, innerAdditionalContent, hasCloseIcon })
109
109
  React.createElement(Dropdown.Content, { portalContainer: portalContainer },
110
110
  isWithSearch && React.createElement(Dropdown.Search, { onKeyUp: (ev) => handleSearchKeyUp(ev, options, setOptionsList) }),
111
111
  React.createElement(Dropdown.List, { isWithGroups: isWithGroups, onScroll: onScroll }, optionsList === null || optionsList === void 0 ? void 0 :
112
- optionsList.map((option) => {
112
+ optionsList.map((option, index) => {
113
113
  var _a, _b;
114
- return option.isHeader ? (React.createElement(Dropdown.Header, { key: option.text, text: option.text })) : (React.createElement(Dropdown.Option, { key: option.value, option: option, isSelected: isSelected(option, selectedValues), isDisabled: (_a = option.isDisabled) !== null && _a !== void 0 ? _a : isDisabled, isReadonly: (_b = option.isReadonly) !== null && _b !== void 0 ? _b : isReadonly, onClick: (option) => handleItemClick(option, defaultCloseOnClick, setSelectedValues, toggleDropdown) }));
114
+ return option.isHeader ? (React.createElement(Dropdown.Header, { key: option.text, text: option.text })) : (React.createElement(Dropdown.Option, { key: `${option.value}-${index}`, option: option, isSelected: isSelected(option, selectedValues), isDisabled: (_a = option.isDisabled) !== null && _a !== void 0 ? _a : isDisabled, isReadonly: (_b = option.isReadonly) !== null && _b !== void 0 ? _b : isReadonly, onClick: (option) => handleItemClick(option, defaultCloseOnClick, setSelectedValues, toggleDropdown) }));
115
115
  }),
116
116
  innerAdditionalContent)))));
117
117
  };
@@ -31,3 +31,4 @@ export declare const getXYModifiersForNestedDropdowns: (portalContainer: HTMLEle
31
31
  };
32
32
  export declare const isChildOfModal: (ref: RefObject<HTMLElement>) => boolean;
33
33
  export declare const getBounding: (element: HTMLElement) => DOMRect;
34
+ export declare const filterOptionDuplicatesByProperty: (options: ISelectOption[], property: string) => ISelectOption[];
@@ -68,7 +68,19 @@ const isChildOfModal = (ref) => {
68
68
  };
69
69
  const getBounding = (element) => {
70
70
  return element.getBoundingClientRect();
71
+ };
72
+ const filterOptionDuplicatesByProperty = (options, property) => {
73
+ const uniqueProperties = [];
74
+ const filteredOptions = options.filter((option) => {
75
+ const isDuplicate = uniqueProperties.includes(option[property]);
76
+ if (!isDuplicate) {
77
+ uniqueProperties.push(option[property]);
78
+ return true;
79
+ }
80
+ return false;
81
+ });
82
+ return filteredOptions;
71
83
  };
72
84
 
73
- export { getBounding, getXYModifiersForNestedDropdowns, handleItemClick, handleSearchKeyUp, isChildOfModal, isSelected };
85
+ export { filterOptionDuplicatesByProperty, getBounding, getXYModifiersForNestedDropdowns, handleItemClick, handleSearchKeyUp, isChildOfModal, isSelected };
74
86
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
1
+ {"version":3,"file":null,"sources":[null],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@dreamcommerce/aurora",
3
3
  "packageManager": "yarn@3.2.0",
4
4
  "sideEffects": false,
5
- "version": "2.6.10",
5
+ "version": "2.6.11",
6
6
  "description": "aurora",
7
7
  "author": "k0ssak",
8
8
  "license": "MIT",