@zohodesk/components 1.0.0-temp-230.1 → 1.0.0-temp-234
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/.cli/propValidation_report.html +1 -1
- package/README.md +41 -11
- package/assets/Appearance/dark/mode/Component_DarkMode.module.css +0 -8
- package/assets/Appearance/light/mode/Component_LightMode.module.css +0 -8
- package/assets/Appearance/pureDark/mode/Component_PureDarkMode.module.css +0 -8
- package/es/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +18 -9
- package/es/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +6 -3
- package/es/DateTime/__tests__/__snapshots__/Time.spec.js.snap +18 -9
- package/es/ListItem/ListItem.js +7 -8
- package/es/ListItem/ListItem.module.css +0 -6
- package/es/ListItem/ListItemWithAvatar.js +12 -6
- package/es/ListItem/ListItemWithCheckBox.js +12 -6
- package/es/ListItem/ListItemWithIcon.js +11 -5
- package/es/ListItem/ListItemWithRadio.js +12 -6
- package/es/ListItem/__tests__/ListItem.spec.js +14 -3
- package/es/ListItem/__tests__/ListItemWithAvatar.spec.js +19 -0
- package/es/ListItem/__tests__/ListItemWithCheckBox.spec.js +19 -0
- package/es/ListItem/__tests__/ListItemWithIcon.spec.js +17 -0
- package/es/ListItem/__tests__/ListItemWithRadio.spec.js +19 -0
- package/es/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +38 -7
- package/es/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +140 -46
- package/es/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +251 -49
- package/es/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +144 -50
- package/es/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +252 -52
- package/es/ListItem/props/propTypes.js +14 -5
- package/es/MultiSelect/AdvancedGroupMultiSelect.js +16 -8
- package/es/MultiSelect/AdvancedMultiSelect.js +13 -6
- package/es/MultiSelect/EmptyState.js +2 -1
- package/es/MultiSelect/MultiSelect.js +67 -35
- package/es/MultiSelect/MultiSelectWithAvatar.js +9 -2
- package/es/MultiSelect/SelectedOptions.js +3 -24
- package/es/MultiSelect/Suggestions.js +175 -98
- package/es/MultiSelect/__tests__/MultiSelect.spec.js +19 -32
- package/es/MultiSelect/__tests__/SelectedOptions.spec.js +0 -13
- package/es/MultiSelect/__tests__/Suggestions.spec.js +52 -6
- package/es/MultiSelect/__tests__/__snapshots__/AdvancedGroupMultiSelect.spec.js.snap +3 -3
- package/es/MultiSelect/__tests__/__snapshots__/AdvancedMultiSelect.spec.js.snap +9 -9
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +178 -10
- package/es/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +3 -3
- package/es/MultiSelect/__tests__/__snapshots__/SelectedOptions.spec.js.snap +0 -15
- package/es/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +308 -31
- package/es/MultiSelect/constants.js +6 -0
- package/es/MultiSelect/props/defaultProps.js +2 -0
- package/es/MultiSelect/props/propTypes.js +16 -58
- package/es/Select/GroupSelect.js +4 -2
- package/es/Select/Select.js +50 -44
- package/es/Select/SelectWithAvatar.js +14 -3
- package/es/Select/SelectWithIcon.js +7 -3
- package/es/Select/__tests__/Select.spec.js +0 -10
- package/es/Select/__tests__/__snapshots__/GroupSelect.spec.js.snap +6 -3
- package/es/Select/__tests__/__snapshots__/Select.spec.js.snap +429 -245
- package/es/Select/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +6 -3
- package/es/Select/props/defaultProps.js +2 -0
- package/es/Select/props/propTypes.js +7 -2
- package/es/TextBoxIcon/TextBoxIcon.js +12 -17
- package/es/TextBoxIcon/TextBoxIcon.module.css +38 -3
- package/es/TextBoxIcon/__tests__/TextBoxIcon.spec.js +2 -1
- package/es/TextBoxIcon/__tests__/__snapshots__/TextBoxIcon.spec.js.snap +225 -116
- package/es/TextBoxIcon/props/propTypes.js +2 -1
- package/es/utils/Common.js +3 -4
- package/es/utils/dropDownUtils.js +40 -16
- package/lib/DateTime/__tests__/__snapshots__/DateTime.spec.js.snap +18 -9
- package/lib/DateTime/__tests__/__snapshots__/DateWidget.spec.js.snap +6 -3
- package/lib/DateTime/__tests__/__snapshots__/Time.spec.js.snap +18 -9
- package/lib/ListItem/ListItem.js +8 -8
- package/lib/ListItem/ListItem.module.css +0 -6
- package/lib/ListItem/ListItemWithAvatar.js +13 -6
- package/lib/ListItem/ListItemWithCheckBox.js +13 -6
- package/lib/ListItem/ListItemWithIcon.js +11 -5
- package/lib/ListItem/ListItemWithRadio.js +13 -6
- package/lib/ListItem/__tests__/ListItem.spec.js +18 -3
- package/lib/ListItem/__tests__/ListItemWithAvatar.spec.js +23 -0
- package/lib/ListItem/__tests__/ListItemWithCheckBox.spec.js +23 -0
- package/lib/ListItem/__tests__/ListItemWithIcon.spec.js +21 -0
- package/lib/ListItem/__tests__/ListItemWithRadio.spec.js +23 -0
- package/lib/ListItem/__tests__/__snapshots__/ListItem.spec.js.snap +38 -7
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithAvatar.spec.js.snap +140 -46
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithCheckBox.spec.js.snap +251 -49
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithIcon.spec.js.snap +144 -50
- package/lib/ListItem/__tests__/__snapshots__/ListItemWithRadio.spec.js.snap +252 -52
- package/lib/ListItem/props/propTypes.js +14 -6
- package/lib/MultiSelect/AdvancedGroupMultiSelect.js +94 -83
- package/lib/MultiSelect/AdvancedMultiSelect.js +16 -7
- package/lib/MultiSelect/EmptyState.js +3 -1
- package/lib/MultiSelect/MultiSelect.js +68 -33
- package/lib/MultiSelect/MultiSelectWithAvatar.js +11 -3
- package/lib/MultiSelect/SelectedOptions.js +3 -24
- package/lib/MultiSelect/Suggestions.js +177 -101
- package/lib/MultiSelect/__tests__/MultiSelect.spec.js +19 -34
- package/lib/MultiSelect/__tests__/SelectedOptions.spec.js +0 -15
- package/lib/MultiSelect/__tests__/Suggestions.spec.js +52 -8
- package/lib/MultiSelect/__tests__/__snapshots__/AdvancedGroupMultiSelect.spec.js.snap +3 -3
- package/lib/MultiSelect/__tests__/__snapshots__/AdvancedMultiSelect.spec.js.snap +9 -9
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +178 -10
- package/lib/MultiSelect/__tests__/__snapshots__/MultiSelectWithAvatar.spec.js.snap +3 -3
- package/lib/MultiSelect/__tests__/__snapshots__/SelectedOptions.spec.js.snap +0 -15
- package/lib/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +308 -31
- package/lib/MultiSelect/constants.js +13 -0
- package/lib/MultiSelect/props/defaultProps.js +2 -0
- package/lib/MultiSelect/props/propTypes.js +15 -58
- package/lib/Select/GroupSelect.js +4 -3
- package/lib/Select/Select.js +48 -41
- package/lib/Select/SelectWithAvatar.js +14 -6
- package/lib/Select/SelectWithIcon.js +7 -4
- package/lib/Select/__tests__/Select.spec.js +0 -12
- package/lib/Select/__tests__/__snapshots__/GroupSelect.spec.js.snap +6 -3
- package/lib/Select/__tests__/__snapshots__/Select.spec.js.snap +429 -245
- package/lib/Select/__tests__/__snapshots__/SelectWithIcon.spec.js.snap +6 -3
- package/lib/Select/props/defaultProps.js +2 -0
- package/lib/Select/props/propTypes.js +7 -2
- package/lib/TextBoxIcon/TextBoxIcon.js +13 -18
- package/lib/TextBoxIcon/TextBoxIcon.module.css +38 -3
- package/lib/TextBoxIcon/__tests__/TextBoxIcon.spec.js +2 -1
- package/lib/TextBoxIcon/__tests__/__snapshots__/TextBoxIcon.spec.js.snap +225 -116
- package/lib/TextBoxIcon/props/propTypes.js +2 -1
- package/lib/utils/Common.js +5 -9
- package/lib/utils/dropDownUtils.js +40 -15
- package/package.json +10 -10
- package/es/ColorSelect/ColorMultiSelect.js +0 -36
- package/es/ColorSelect/ColorSingleSelect.js +0 -50
- package/es/ColorSelect/__tests__/ColorMultiSelect.spec.js +0 -59
- package/es/ColorSelect/__tests__/ColorSingleSelect.spec.js +0 -59
- package/es/ColorSelect/__tests__/__snapshots__/ColorMultiSelect.spec.js.snap +0 -547
- package/es/ColorSelect/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +0 -178
- package/es/ColorSelect/common/ColorIndicator/ColorIndicator.js +0 -27
- package/es/ColorSelect/common/ColorIndicator/ColorIndicator.module.css +0 -18
- package/es/ColorSelect/common/ColorIndicator/__tests__/ColorSingleSelect.spec.js +0 -60
- package/es/ColorSelect/common/ColorIndicator/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +0 -95
- package/es/ColorSelect/common/ColorIndicator/props/defaultProps.js +0 -7
- package/es/ColorSelect/common/ColorIndicator/props/propTypes.js +0 -9
- package/es/ColorSelect/common/ColoredTag/ColoredTag.js +0 -33
- package/es/ColorSelect/common/ColoredTag/__tests__/ColoredTag.spec.js +0 -50
- package/es/ColorSelect/common/ColoredTag/__tests__/__snapshots__/ColoredTag.spec.js.snap +0 -101
- package/es/ColorSelect/common/ColoredTag/props/propTypes.js +0 -9
- package/es/ColorSelect/common/helpers.js +0 -35
- package/es/ColorSelect/props/defaultProps.js +0 -13
- package/es/ColorSelect/props/propTypes.js +0 -14
- package/es/shared/ArrowIcon/ArrowIcon.js +0 -36
- package/es/shared/ArrowIcon/ArrowIcon.module.css +0 -22
- package/es/shared/ArrowIcon/props/defaultProps.js +0 -6
- package/es/shared/ArrowIcon/props/propTypes.js +0 -10
- package/es/shared/InputFieldLine/InputFieldLine.js +0 -39
- package/es/shared/InputFieldLine/InputFieldLine.module.css +0 -90
- package/es/shared/InputFieldLine/__tests__/InputFieldLine.spec.js +0 -114
- package/es/shared/InputFieldLine/__tests__/__snapshots__/InputFieldLine.spec.js.snap +0 -194
- package/es/shared/InputFieldLine/props/defaultProps.js +0 -14
- package/es/shared/InputFieldLine/props/propTypes.js +0 -19
- package/lib/ColorSelect/ColorMultiSelect.js +0 -65
- package/lib/ColorSelect/ColorSingleSelect.js +0 -78
- package/lib/ColorSelect/__tests__/ColorMultiSelect.spec.js +0 -70
- package/lib/ColorSelect/__tests__/ColorSingleSelect.spec.js +0 -70
- package/lib/ColorSelect/__tests__/__snapshots__/ColorMultiSelect.spec.js.snap +0 -547
- package/lib/ColorSelect/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +0 -178
- package/lib/ColorSelect/common/ColorIndicator/ColorIndicator.js +0 -40
- package/lib/ColorSelect/common/ColorIndicator/ColorIndicator.module.css +0 -18
- package/lib/ColorSelect/common/ColorIndicator/__tests__/ColorSingleSelect.spec.js +0 -67
- package/lib/ColorSelect/common/ColorIndicator/__tests__/__snapshots__/ColorSingleSelect.spec.js.snap +0 -95
- package/lib/ColorSelect/common/ColorIndicator/props/defaultProps.js +0 -14
- package/lib/ColorSelect/common/ColorIndicator/props/propTypes.js +0 -20
- package/lib/ColorSelect/common/ColoredTag/ColoredTag.js +0 -61
- package/lib/ColorSelect/common/ColoredTag/__tests__/ColoredTag.spec.js +0 -58
- package/lib/ColorSelect/common/ColoredTag/__tests__/__snapshots__/ColoredTag.spec.js.snap +0 -101
- package/lib/ColorSelect/common/ColoredTag/props/propTypes.js +0 -28
- package/lib/ColorSelect/common/helpers.js +0 -53
- package/lib/ColorSelect/props/defaultProps.js +0 -31
- package/lib/ColorSelect/props/propTypes.js +0 -35
- package/lib/shared/ArrowIcon/ArrowIcon.js +0 -51
- package/lib/shared/ArrowIcon/ArrowIcon.module.css +0 -22
- package/lib/shared/ArrowIcon/props/defaultProps.js +0 -13
- package/lib/shared/ArrowIcon/props/propTypes.js +0 -21
- package/lib/shared/InputFieldLine/InputFieldLine.js +0 -53
- package/lib/shared/InputFieldLine/InputFieldLine.module.css +0 -90
- package/lib/shared/InputFieldLine/__tests__/InputFieldLine.spec.js +0 -122
- package/lib/shared/InputFieldLine/__tests__/__snapshots__/InputFieldLine.spec.js.snap +0 -194
- package/lib/shared/InputFieldLine/props/defaultProps.js +0 -21
- package/lib/shared/InputFieldLine/props/propTypes.js +0 -36
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { AdvancedMultiSelect_propTypes } from "./props/propTypes";
|
|
4
4
|
import { AdvancedMultiSelect_defaultProps } from "./props/defaultProps";
|
|
5
|
+
import { MULTISELECT_I18N_KEYS } from "./constants";
|
|
5
6
|
/**** Components ****/
|
|
6
7
|
|
|
7
8
|
import { MultiSelectComponent } from "./MultiSelect";
|
|
@@ -177,7 +178,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
|
|
|
177
178
|
const {
|
|
178
179
|
selectedOptionsLimit,
|
|
179
180
|
selectedOptionDetails,
|
|
180
|
-
allowValueFallback
|
|
181
|
+
allowValueFallback,
|
|
182
|
+
limit
|
|
181
183
|
} = props;
|
|
182
184
|
showedSelectedOptionsCount = getIsEmptyValue(showedSelectedOptionsCount) ? selectedOptionsLimit : showedSelectedOptionsCount;
|
|
183
185
|
const {
|
|
@@ -191,7 +193,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
|
|
|
191
193
|
selectedOptions,
|
|
192
194
|
normalizedFormatOptions: formatOptions,
|
|
193
195
|
selectedOptionsLength: showedSelectedOptionsCount,
|
|
194
|
-
allowValueFallback
|
|
196
|
+
allowValueFallback,
|
|
197
|
+
limit
|
|
195
198
|
});
|
|
196
199
|
}
|
|
197
200
|
|
|
@@ -385,7 +388,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
|
|
|
385
388
|
positionsOffset,
|
|
386
389
|
targetOffset,
|
|
387
390
|
isRestrictScroll,
|
|
388
|
-
isFocus
|
|
391
|
+
isFocus,
|
|
392
|
+
limit
|
|
389
393
|
} = this.props;
|
|
390
394
|
let {
|
|
391
395
|
SuggestionsProps = {},
|
|
@@ -395,10 +399,11 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
|
|
|
395
399
|
containerClass = ''
|
|
396
400
|
} = customClass;
|
|
397
401
|
const {
|
|
398
|
-
clearText =
|
|
402
|
+
clearText = MULTISELECT_I18N_KEYS.clearText,
|
|
403
|
+
limitReachedMessage = MULTISELECT_I18N_KEYS.limitReachedMessage
|
|
399
404
|
} = i18nKeys;
|
|
400
405
|
const {
|
|
401
|
-
clearLabel =
|
|
406
|
+
clearLabel = MULTISELECT_I18N_KEYS.clearText
|
|
402
407
|
} = a11y;
|
|
403
408
|
i18nKeys = Object.assign({}, i18nKeys, {
|
|
404
409
|
emptyText: i18nKeys.emptyText || emptyMessage,
|
|
@@ -541,7 +546,7 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
|
|
|
541
546
|
}, /*#__PURE__*/React.createElement(Card, {
|
|
542
547
|
customClass: style.box,
|
|
543
548
|
onScroll: this.handleScroll
|
|
544
|
-
}, needSelectAll ? /*#__PURE__*/React.createElement(CardHeader, null, /*#__PURE__*/React.createElement(MultiSelectHeader, {
|
|
549
|
+
}, needSelectAll && !(limit >= 0) ? /*#__PURE__*/React.createElement(CardHeader, null, /*#__PURE__*/React.createElement(MultiSelectHeader, {
|
|
545
550
|
onSelect: this.handleSelectAll,
|
|
546
551
|
selectAllText: selectAllText,
|
|
547
552
|
suggestions: suggestions,
|
|
@@ -563,6 +568,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
|
|
|
563
568
|
role: 'option'
|
|
564
569
|
},
|
|
565
570
|
dataId: `${dataIdMultiSelectComp}_Options`,
|
|
571
|
+
limit: limit,
|
|
572
|
+
limitReachedMessage: limitReachedMessage,
|
|
566
573
|
...SuggestionsProps
|
|
567
574
|
}) : /*#__PURE__*/React.createElement(EmptyState, {
|
|
568
575
|
isLoading: isFetchingOptions,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { EmptyState_propTypes } from "./props/propTypes";
|
|
4
4
|
import { EmptyState_defaultProps } from "./props/defaultProps";
|
|
5
|
+
import { MULTISELECT_I18N_KEYS } from "./constants";
|
|
5
6
|
/**** CSS ****/
|
|
6
7
|
|
|
7
8
|
import style from "./MultiSelect.module.css";
|
|
@@ -23,7 +24,7 @@ export default class EmptyState extends React.PureComponent {
|
|
|
23
24
|
a11y
|
|
24
25
|
} = this.props;
|
|
25
26
|
let {
|
|
26
|
-
loadingText =
|
|
27
|
+
loadingText = MULTISELECT_I18N_KEYS.loadingText,
|
|
27
28
|
emptyText = emptyMessage,
|
|
28
29
|
noMoreText = noMoreOptionsMessage,
|
|
29
30
|
searchEmptyText = searchEmptyMessage
|
|
@@ -3,6 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { MultiSelect_propTypes } from "./props/propTypes";
|
|
4
4
|
import { MultiSelect_defaultProps } from "./props/defaultProps";
|
|
5
5
|
import { defaultProps as MobileHeader_defaultProps } from "./MobileHeader/props/defaultProps";
|
|
6
|
+
import { MULTISELECT_I18N_KEYS } from "./constants";
|
|
6
7
|
/**** Components ****/
|
|
7
8
|
|
|
8
9
|
import Popup from "../Popup/Popup";
|
|
@@ -80,6 +81,8 @@ export class MultiSelectComponent extends React.Component {
|
|
|
80
81
|
this.handleSearchOptions = debounce(this.handleSearchOptions.bind(this), searchDebounceTime);
|
|
81
82
|
this.handleScroll = this.handleScroll.bind(this);
|
|
82
83
|
this.handleScrollFuncCall = debounce(this.handleScrollFuncCall.bind(this), 500);
|
|
84
|
+
this.getVirtualizerPublicMethods = this.getVirtualizerPublicMethods.bind(this);
|
|
85
|
+
this.setSuggestionsVirtualizerContainerRefFunction = this.setSuggestionsVirtualizerContainerRefFunction.bind(this);
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
componentDidMount() {
|
|
@@ -139,11 +142,6 @@ export class MultiSelectComponent extends React.Component {
|
|
|
139
142
|
}
|
|
140
143
|
|
|
141
144
|
componentDidUpdate(prevProps, prevState) {
|
|
142
|
-
const {
|
|
143
|
-
suggestionContainer,
|
|
144
|
-
selectedOptionContainer,
|
|
145
|
-
suggestionsOrder
|
|
146
|
-
} = this;
|
|
147
145
|
const {
|
|
148
146
|
hoverOption,
|
|
149
147
|
highLightedSelectOptions,
|
|
@@ -155,7 +153,8 @@ export class MultiSelectComponent extends React.Component {
|
|
|
155
153
|
isPopupOpen,
|
|
156
154
|
onDropBoxClose,
|
|
157
155
|
onDropBoxOpen,
|
|
158
|
-
isSearchClearOnClose
|
|
156
|
+
isSearchClearOnClose,
|
|
157
|
+
isVirtualizerEnabled
|
|
159
158
|
} = this.props; //handle dropbox open & close
|
|
160
159
|
|
|
161
160
|
if (prevProps.isPopupOpen !== isPopupOpen) {
|
|
@@ -171,12 +170,23 @@ export class MultiSelectComponent extends React.Component {
|
|
|
171
170
|
} //scrollTo handling
|
|
172
171
|
|
|
173
172
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
173
|
+
if (isVirtualizerEnabled && !!this.virtualizerMethods) {
|
|
174
|
+
let position = prevState.hoverOption > hoverOption ? 'top' : 'bottom';
|
|
175
|
+
this.virtualizerMethods.getElementVisiblePercentage(hoverOption) < 50 && this.virtualizerMethods.scrollToIndex(hoverOption, position);
|
|
176
|
+
} else {
|
|
177
|
+
const {
|
|
178
|
+
suggestionContainer,
|
|
179
|
+
selectedOptionContainer,
|
|
180
|
+
suggestionsOrder
|
|
181
|
+
} = this;
|
|
182
|
+
const hoverId = suggestionsOrder[hoverOption] || '';
|
|
183
|
+
const selectedSuggestion = this[`suggestion_${hoverId}`];
|
|
184
|
+
const lastHighLightedSelectOption = highLightedSelectOptions.slice(-1).length ? highLightedSelectOptions.slice(-1)[0] : null;
|
|
185
|
+
const selectedOption = this[`selectedOption_${lastHighLightedSelectOption}`];
|
|
186
|
+
isPopupOpen && scrollTo(suggestionContainer, selectedSuggestion);
|
|
187
|
+
selectedOptions.length && selectedOption && scrollTo(selectedOptionContainer, selectedOption);
|
|
188
|
+
} //When suggestions length less than 5, getNextOptions function call
|
|
189
|
+
|
|
180
190
|
|
|
181
191
|
const {
|
|
182
192
|
isNextOptions,
|
|
@@ -215,6 +225,7 @@ export class MultiSelectComponent extends React.Component {
|
|
|
215
225
|
options,
|
|
216
226
|
valueField,
|
|
217
227
|
textField,
|
|
228
|
+
secondaryField,
|
|
218
229
|
prefixText,
|
|
219
230
|
disabledOptions,
|
|
220
231
|
allowValueFallback,
|
|
@@ -228,18 +239,21 @@ export class MultiSelectComponent extends React.Component {
|
|
|
228
239
|
optionType: 'default',
|
|
229
240
|
disabledOptions,
|
|
230
241
|
allowValueFallback,
|
|
242
|
+
secondaryField,
|
|
231
243
|
searchFields
|
|
232
244
|
});
|
|
233
245
|
}
|
|
234
246
|
|
|
235
247
|
handleGetSelectedOptions(selectedOptions, normalizedFormatOptions, props) {
|
|
236
248
|
const {
|
|
237
|
-
allowValueFallback
|
|
249
|
+
allowValueFallback,
|
|
250
|
+
limit
|
|
238
251
|
} = props;
|
|
239
252
|
return this.getSelectedOptions({
|
|
240
253
|
selectedOptions,
|
|
241
254
|
normalizedFormatOptions,
|
|
242
|
-
allowValueFallback
|
|
255
|
+
allowValueFallback,
|
|
256
|
+
limit
|
|
243
257
|
});
|
|
244
258
|
}
|
|
245
259
|
|
|
@@ -313,8 +327,10 @@ export class MultiSelectComponent extends React.Component {
|
|
|
313
327
|
getNextOptions,
|
|
314
328
|
isPopupOpen,
|
|
315
329
|
isPopupOpenOnEnter,
|
|
316
|
-
onKeyDown
|
|
330
|
+
onKeyDown,
|
|
331
|
+
limit
|
|
317
332
|
} = this.props;
|
|
333
|
+
const allowKeyboardActions = !limit || limit && selectedOptions.length < limit;
|
|
318
334
|
const highLightedSelectOptionsLen = highLightedSelectOptions.length;
|
|
319
335
|
|
|
320
336
|
if (isPopupOpen && (keyCode === 38 || keyCode === 40 || keyCode === 13 || keyCode === 27 || keyCode === 9)) {
|
|
@@ -334,7 +350,7 @@ export class MultiSelectComponent extends React.Component {
|
|
|
334
350
|
|
|
335
351
|
const suggestionsLen = suggestions.length;
|
|
336
352
|
|
|
337
|
-
if (suggestionsLen && isPopupOpen && keyCode === 38) {
|
|
353
|
+
if (suggestionsLen && isPopupOpen && keyCode === 38 && allowKeyboardActions) {
|
|
338
354
|
//up arrow
|
|
339
355
|
|
|
340
356
|
/*if (hoverOption === 0) { //disable first to last option higlight
|
|
@@ -345,7 +361,7 @@ export class MultiSelectComponent extends React.Component {
|
|
|
345
361
|
hoverOption: hoverOption - 1
|
|
346
362
|
});
|
|
347
363
|
}
|
|
348
|
-
} else if (suggestionsLen && isPopupOpen && keyCode === 40) {
|
|
364
|
+
} else if (suggestionsLen && isPopupOpen && keyCode === 40 && allowKeyboardActions) {
|
|
349
365
|
//down arrow
|
|
350
366
|
|
|
351
367
|
/*else if (hoverOption === suggestionsLen - 1 || hoverOption === null) {
|
|
@@ -362,8 +378,8 @@ export class MultiSelectComponent extends React.Component {
|
|
|
362
378
|
hoverOption: hoverOption + 1
|
|
363
379
|
});
|
|
364
380
|
}
|
|
365
|
-
} else if (keyCode === 13) {
|
|
366
|
-
//enter
|
|
381
|
+
} else if (keyCode === 13 && allowKeyboardActions) {
|
|
382
|
+
//enter ke
|
|
367
383
|
const selectedOption = suggestions[hoverOption] || {};
|
|
368
384
|
const {
|
|
369
385
|
id
|
|
@@ -727,14 +743,16 @@ export class MultiSelectComponent extends React.Component {
|
|
|
727
743
|
needToCloseOnSelect,
|
|
728
744
|
togglePopup,
|
|
729
745
|
selectedOptions: propSelectedOptions,
|
|
730
|
-
disabledOptions = dummyArray
|
|
746
|
+
disabledOptions = dummyArray,
|
|
747
|
+
limit
|
|
731
748
|
} = this.props;
|
|
732
749
|
const {
|
|
733
750
|
newSelectedOptions
|
|
734
751
|
} = filterSelectedOptions({
|
|
735
752
|
selectedOptions,
|
|
736
753
|
propSelectedOptions,
|
|
737
|
-
disabledOptions
|
|
754
|
+
disabledOptions,
|
|
755
|
+
limit
|
|
738
756
|
});
|
|
739
757
|
const selectedOptionsLen = newSelectedOptions.length;
|
|
740
758
|
const allSelectedOptionsDetails = [];
|
|
@@ -791,6 +809,7 @@ export class MultiSelectComponent extends React.Component {
|
|
|
791
809
|
|
|
792
810
|
suggestionContainerRef(el) {
|
|
793
811
|
this.suggestionContainer = el;
|
|
812
|
+
typeof this.setSuggestionsVirtualizerRef === 'function' && this.setSuggestionsVirtualizerRef(el);
|
|
794
813
|
}
|
|
795
814
|
|
|
796
815
|
suggestionItemRef(el, index, id) {
|
|
@@ -855,6 +874,15 @@ export class MultiSelectComponent extends React.Component {
|
|
|
855
874
|
});
|
|
856
875
|
}
|
|
857
876
|
|
|
877
|
+
getVirtualizerPublicMethods(methods) {
|
|
878
|
+
this.virtualizerMethods = methods;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
setSuggestionsVirtualizerContainerRefFunction(refFunc) {
|
|
882
|
+
this.setSuggestionsVirtualizerRef = refFunc;
|
|
883
|
+
this.suggestionContainer && refFunc(this.suggestionContainer);
|
|
884
|
+
}
|
|
885
|
+
|
|
858
886
|
getSelectionUI() {
|
|
859
887
|
let isResponsive = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
860
888
|
let {
|
|
@@ -882,7 +910,6 @@ export class MultiSelectComponent extends React.Component {
|
|
|
882
910
|
isPopupOpen,
|
|
883
911
|
ariaErrorId,
|
|
884
912
|
customProps,
|
|
885
|
-
renderCustomSelectedValue,
|
|
886
913
|
isFocus,
|
|
887
914
|
isPopupReady,
|
|
888
915
|
renderCustomClearComponent,
|
|
@@ -895,10 +922,10 @@ export class MultiSelectComponent extends React.Component {
|
|
|
895
922
|
searchStr
|
|
896
923
|
} = this.state;
|
|
897
924
|
const {
|
|
898
|
-
clearText =
|
|
925
|
+
clearText = MULTISELECT_I18N_KEYS.clearText
|
|
899
926
|
} = i18nKeys;
|
|
900
927
|
const {
|
|
901
|
-
clearLabel =
|
|
928
|
+
clearLabel = MULTISELECT_I18N_KEYS.clearLabel,
|
|
902
929
|
ariaLabelledby
|
|
903
930
|
} = a11y;
|
|
904
931
|
let {
|
|
@@ -927,11 +954,7 @@ export class MultiSelectComponent extends React.Component {
|
|
|
927
954
|
onSelect: this.handleClickSelectedOption,
|
|
928
955
|
size: size,
|
|
929
956
|
palette: palette,
|
|
930
|
-
dataId: `${dataId}_selectedOptions
|
|
931
|
-
renderCustomSelectedValue: renderCustomSelectedValue,
|
|
932
|
-
isPopupReady: isPopupReady,
|
|
933
|
-
isPopupOpen: isPopupOpen,
|
|
934
|
-
isDisabled: isDisabled
|
|
957
|
+
dataId: `${dataId}_selectedOptions`
|
|
935
958
|
}), /*#__PURE__*/React.createElement(Box, {
|
|
936
959
|
flexible: true,
|
|
937
960
|
className: style.wrapper,
|
|
@@ -1040,11 +1063,10 @@ export class MultiSelectComponent extends React.Component {
|
|
|
1040
1063
|
isLoading,
|
|
1041
1064
|
selectAllText,
|
|
1042
1065
|
needSelectAll,
|
|
1043
|
-
customProps
|
|
1066
|
+
customProps,
|
|
1067
|
+
isVirtualizerEnabled,
|
|
1068
|
+
limit
|
|
1044
1069
|
} = this.props;
|
|
1045
|
-
let {
|
|
1046
|
-
SuggestionsProps = {}
|
|
1047
|
-
} = customProps;
|
|
1048
1070
|
const {
|
|
1049
1071
|
selectedOptions,
|
|
1050
1072
|
searchStr,
|
|
@@ -1054,7 +1076,8 @@ export class MultiSelectComponent extends React.Component {
|
|
|
1054
1076
|
selectedOptionIds
|
|
1055
1077
|
} = this.state;
|
|
1056
1078
|
const {
|
|
1057
|
-
searchText =
|
|
1079
|
+
searchText = MULTISELECT_I18N_KEYS.searchText,
|
|
1080
|
+
limitReachedMessage = MULTISELECT_I18N_KEYS.limitReachedMessage
|
|
1058
1081
|
} = i18nKeys;
|
|
1059
1082
|
const suggestions = this.handleFilterSuggestions();
|
|
1060
1083
|
const setAriaId = this.getNextAriaId();
|
|
@@ -1065,6 +1088,9 @@ export class MultiSelectComponent extends React.Component {
|
|
|
1065
1088
|
noMoreText: i18nKeys.noMoreText || noMoreOptionsMessage
|
|
1066
1089
|
});
|
|
1067
1090
|
let isModel = isMobilePopover(needResponsive);
|
|
1091
|
+
let {
|
|
1092
|
+
SuggestionsProps
|
|
1093
|
+
} = customProps;
|
|
1068
1094
|
return /*#__PURE__*/React.createElement("div", {
|
|
1069
1095
|
className: `${style.wrapper} ${isDisabled ? style.disabled : ''} ${isReadOnly ? style.readOnly : ''} ${disableAction ? CssProvider('isBlock') : ''} ${borderColor === 'transparent' ? style.transparentContainer : ''} ${needEffect && !(isDisabled || isReadOnly) ? style.effect : ''}`,
|
|
1070
1096
|
"data-id": `${isDisabled ? `${dataId}_disabled` : isReadOnly ? `${dataId}_readOnly` : dataId}`,
|
|
@@ -1108,7 +1134,7 @@ export class MultiSelectComponent extends React.Component {
|
|
|
1108
1134
|
onClick: this.handlePopupClose
|
|
1109
1135
|
}, /*#__PURE__*/React.createElement("div", {
|
|
1110
1136
|
className: style.effect
|
|
1111
|
-
}, this.getSelectionUI(true))) : null, needSelectAll ? /*#__PURE__*/React.createElement(CardHeader, null, /*#__PURE__*/React.createElement(MultiSelectHeader, {
|
|
1137
|
+
}, this.getSelectionUI(true))) : null, needSelectAll && !(limit >= 0) ? /*#__PURE__*/React.createElement(CardHeader, null, /*#__PURE__*/React.createElement(MultiSelectHeader, {
|
|
1112
1138
|
onSelect: this.handleSelectAll,
|
|
1113
1139
|
selectAllText: selectAllText,
|
|
1114
1140
|
suggestions: suggestions,
|
|
@@ -1123,7 +1149,11 @@ export class MultiSelectComponent extends React.Component {
|
|
|
1123
1149
|
}, isSearching ? /*#__PURE__*/React.createElement("div", {
|
|
1124
1150
|
className: style[palette]
|
|
1125
1151
|
}, searchText) : suggestions.length ? /*#__PURE__*/React.createElement(Suggestions, {
|
|
1152
|
+
key: searchStr.trim(),
|
|
1126
1153
|
suggestions: suggestions,
|
|
1154
|
+
isVirtualizerEnabled: isVirtualizerEnabled,
|
|
1155
|
+
getVirtualizerPublicMethods: this.getVirtualizerPublicMethods,
|
|
1156
|
+
setVirtualizerContainerRefFunction: this.setSuggestionsVirtualizerContainerRefFunction,
|
|
1127
1157
|
getRef: this.suggestionItemRef,
|
|
1128
1158
|
hoverOption: hoverOption,
|
|
1129
1159
|
onClick: this.handleSelectOption,
|
|
@@ -1135,6 +1165,8 @@ export class MultiSelectComponent extends React.Component {
|
|
|
1135
1165
|
a11y: {
|
|
1136
1166
|
role: 'option'
|
|
1137
1167
|
},
|
|
1168
|
+
limit: limit,
|
|
1169
|
+
limitReachedMessage: limitReachedMessage,
|
|
1138
1170
|
...SuggestionsProps
|
|
1139
1171
|
}) : /*#__PURE__*/React.createElement(EmptyState, {
|
|
1140
1172
|
isLoading: isFetchingOptions,
|
|
@@ -3,6 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { MultiSelectWithAvatar_propTypes } from "./props/propTypes";
|
|
4
4
|
import { MultiSelectWithAvatar_defaultProps } from "./props/defaultProps";
|
|
5
5
|
import { defaultProps as MobileHeader_defaultProps } from "./MobileHeader/props/defaultProps";
|
|
6
|
+
import { MULTISELECT_I18N_KEYS } from "./constants";
|
|
6
7
|
/**** Components ****/
|
|
7
8
|
|
|
8
9
|
import { MultiSelectComponent } from "./MultiSelect";
|
|
@@ -93,11 +94,15 @@ class MultiSelectWithAvatarComponent extends MultiSelectComponent {
|
|
|
93
94
|
needEffect,
|
|
94
95
|
isLoading,
|
|
95
96
|
keepSelectedOptions,
|
|
96
|
-
customProps
|
|
97
|
+
customProps,
|
|
98
|
+
limit
|
|
97
99
|
} = this.props;
|
|
98
100
|
let {
|
|
99
101
|
SuggestionsProps = {}
|
|
100
102
|
} = customProps;
|
|
103
|
+
let {
|
|
104
|
+
limitReachedMessage = MULTISELECT_I18N_KEYS.limitReachedMessage
|
|
105
|
+
} = i18nKeys;
|
|
101
106
|
i18nKeys = Object.assign({}, MobileHeader_defaultProps.i18nKeys, i18nKeys, {
|
|
102
107
|
emptyText: i18nKeys.emptyText || emptyMessage,
|
|
103
108
|
searchEmptyText: i18nKeys.searchEmptyText || searchEmptyMessage,
|
|
@@ -158,7 +163,7 @@ class MultiSelectWithAvatarComponent extends MultiSelectComponent {
|
|
|
158
163
|
onClick: this.handlePopupClose
|
|
159
164
|
}, /*#__PURE__*/React.createElement("div", {
|
|
160
165
|
className: style.effect
|
|
161
|
-
}, this.getSelectionUI(true)))) : null, needSelectAll ? /*#__PURE__*/React.createElement(CardHeader, null, /*#__PURE__*/React.createElement(MultiSelectHeader, {
|
|
166
|
+
}, this.getSelectionUI(true)))) : null, needSelectAll && !(limit >= 0) ? /*#__PURE__*/React.createElement(CardHeader, null, /*#__PURE__*/React.createElement(MultiSelectHeader, {
|
|
162
167
|
onSelect: this.handleSelectAll,
|
|
163
168
|
selectAllText: selectAllText,
|
|
164
169
|
suggestions: suggestions,
|
|
@@ -184,6 +189,8 @@ class MultiSelectWithAvatarComponent extends MultiSelectComponent {
|
|
|
184
189
|
a11y: {
|
|
185
190
|
role: 'option'
|
|
186
191
|
},
|
|
192
|
+
limit: limit,
|
|
193
|
+
limitReachedMessage: limitReachedMessage,
|
|
187
194
|
...SuggestionsProps
|
|
188
195
|
}) : /*#__PURE__*/React.createElement(EmptyState, {
|
|
189
196
|
isLoading: isFetchingOptions,
|
|
@@ -23,13 +23,11 @@ export default class SelectedOptions extends React.PureComponent {
|
|
|
23
23
|
size,
|
|
24
24
|
palette,
|
|
25
25
|
dataId,
|
|
26
|
-
|
|
27
|
-
isPopupOpen,
|
|
28
|
-
isPopupReady,
|
|
29
|
-
isDisabled: isInputDisabled
|
|
26
|
+
limit
|
|
30
27
|
} = this.props;
|
|
31
28
|
const isDarkPalette = palette === 'dark' ? 'dark' : 'danger';
|
|
32
|
-
|
|
29
|
+
const selectedData = limit && limit > 0 ? selectedOptions.slice(0, limit) : selectedOptions;
|
|
30
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, selectedData.map(option => {
|
|
33
31
|
const {
|
|
34
32
|
id,
|
|
35
33
|
value,
|
|
@@ -71,25 +69,6 @@ export default class SelectedOptions extends React.PureComponent {
|
|
|
71
69
|
iconName: icon,
|
|
72
70
|
iconSize: iconSize
|
|
73
71
|
}));
|
|
74
|
-
} else if (optionType === 'custom') {
|
|
75
|
-
return /*#__PURE__*/React.createElement(Box, {
|
|
76
|
-
className: `${style.tag} ${style[size]}`,
|
|
77
|
-
key: `${id}customTag`,
|
|
78
|
-
dataId: dataId
|
|
79
|
-
}, typeof renderCustomSelectedValue == 'function' ? renderCustomSelectedValue({
|
|
80
|
-
onRemove: isDisabled || isReadOnly ? null : onRemove,
|
|
81
|
-
palette: isDarkPalette,
|
|
82
|
-
onSelectTag: isReadOnly ? null : onSelect,
|
|
83
|
-
getRef: getRef,
|
|
84
|
-
isReadOnly: isReadOnly,
|
|
85
|
-
isPopupReady: isPopupReady,
|
|
86
|
-
isPopupOpen: isPopupOpen,
|
|
87
|
-
isDisabled: isInputDisabled,
|
|
88
|
-
size,
|
|
89
|
-
highLightedSelectOptions,
|
|
90
|
-
isActive: highLightedSelectOptions.indexOf(id) >= 0,
|
|
91
|
-
option
|
|
92
|
-
}) : renderCustomSelectedValue);
|
|
93
72
|
}
|
|
94
73
|
|
|
95
74
|
return /*#__PURE__*/React.createElement(Box, {
|