@zohodesk/components 1.4.8 → 1.4.9

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.
Files changed (31) hide show
  1. package/.cli/propValidation_report.html +1 -1
  2. package/README.md +6 -0
  3. package/es/MultiSelect/AdvancedGroupMultiSelect.js +16 -8
  4. package/es/MultiSelect/AdvancedMultiSelect.js +13 -6
  5. package/es/MultiSelect/EmptyState.js +2 -1
  6. package/es/MultiSelect/MultiSelect.js +26 -15
  7. package/es/MultiSelect/MultiSelectWithAvatar.js +9 -2
  8. package/es/MultiSelect/SelectedOptions.js +4 -2
  9. package/es/MultiSelect/Suggestions.js +10 -2
  10. package/es/MultiSelect/__tests__/MultiSelect.spec.js +25 -0
  11. package/es/MultiSelect/__tests__/Suggestions.spec.js +58 -0
  12. package/es/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +253 -0
  13. package/es/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +343 -0
  14. package/es/MultiSelect/constants.js +6 -0
  15. package/es/MultiSelect/props/propTypes.js +15 -55
  16. package/es/utils/dropDownUtils.js +25 -6
  17. package/lib/MultiSelect/AdvancedGroupMultiSelect.js +94 -83
  18. package/lib/MultiSelect/AdvancedMultiSelect.js +16 -7
  19. package/lib/MultiSelect/EmptyState.js +3 -1
  20. package/lib/MultiSelect/MultiSelect.js +28 -15
  21. package/lib/MultiSelect/MultiSelectWithAvatar.js +11 -3
  22. package/lib/MultiSelect/SelectedOptions.js +4 -2
  23. package/lib/MultiSelect/Suggestions.js +10 -2
  24. package/lib/MultiSelect/__tests__/MultiSelect.spec.js +25 -0
  25. package/lib/MultiSelect/__tests__/Suggestions.spec.js +58 -0
  26. package/lib/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +253 -0
  27. package/lib/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +343 -0
  28. package/lib/MultiSelect/constants.js +13 -0
  29. package/lib/MultiSelect/props/propTypes.js +14 -55
  30. package/lib/utils/dropDownUtils.js +24 -3
  31. package/package.json +7 -6
@@ -18,3 +18,346 @@ exports[`Suggestions rendering the defult props 1`] = `
18
18
  </div>
19
19
  </DocumentFragment>
20
20
  `;
21
+
22
+ exports[`Suggestions rendering with limit props 1`] = `
23
+ <DocumentFragment>
24
+ <div
25
+ class="flex coldir"
26
+ data-id="containerComponent"
27
+ data-selector-id="container"
28
+ data-test-id="containerComponent"
29
+ tabindex="0"
30
+ >
31
+ <div
32
+ class="shrinkOff"
33
+ data-id="undefined"
34
+ data-selector-id="box"
35
+ data-test-id="undefined"
36
+ >
37
+ <li
38
+ aria-label="text2"
39
+ aria-selected="true"
40
+ class="list medium default activedefault activewithBorder flex rowdir vCenter"
41
+ data-a11y-inset-focus="true"
42
+ data-a11y-list-active="false"
43
+ data-id="text2"
44
+ data-selected="true"
45
+ data-selector-id="listItem"
46
+ data-test-id="text2"
47
+ data-title="text2"
48
+ role="option"
49
+ style="color: red;"
50
+ tabindex="0"
51
+ >
52
+ <div
53
+ class="leftBox grow basis shrinkOff"
54
+ data-id="boxComponent"
55
+ data-selector-id="box"
56
+ data-test-id="boxComponent"
57
+ >
58
+ <div
59
+ class="titleBox shrinkOff"
60
+ data-id="boxComponent"
61
+ data-selector-id="box"
62
+ data-test-id="boxComponent"
63
+ >
64
+ <div
65
+ class="value basisAuto shrinkOn"
66
+ data-id="boxComponent"
67
+ data-selector-id="box"
68
+ data-test-id="boxComponent"
69
+ >
70
+ text2
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </li>
75
+ <li
76
+ aria-label="text3"
77
+ aria-selected="true"
78
+ class="list medium default activedefault activewithBorder flex rowdir vCenter"
79
+ data-a11y-inset-focus="true"
80
+ data-a11y-list-active="false"
81
+ data-id="text3"
82
+ data-selected="true"
83
+ data-selector-id="listItem"
84
+ data-test-id="text3"
85
+ data-title="text3"
86
+ role="option"
87
+ style="color: blue;"
88
+ tabindex="0"
89
+ >
90
+ <div
91
+ class="leftBox grow basis shrinkOff"
92
+ data-id="boxComponent"
93
+ data-selector-id="box"
94
+ data-test-id="boxComponent"
95
+ >
96
+ <div
97
+ class="titleBox shrinkOff"
98
+ data-id="boxComponent"
99
+ data-selector-id="box"
100
+ data-test-id="boxComponent"
101
+ >
102
+ <div
103
+ class="value basisAuto shrinkOn"
104
+ data-id="boxComponent"
105
+ data-selector-id="box"
106
+ data-test-id="boxComponent"
107
+ >
108
+ text3
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </li>
113
+ <li
114
+ aria-label="text4"
115
+ aria-selected="true"
116
+ class="list medium default activedefault activewithBorder flex rowdir vCenter"
117
+ data-a11y-inset-focus="true"
118
+ data-a11y-list-active="false"
119
+ data-id="text4"
120
+ data-selected="true"
121
+ data-selector-id="listItem"
122
+ data-test-id="text4"
123
+ data-title="text4"
124
+ role="option"
125
+ tabindex="0"
126
+ >
127
+ <div
128
+ class="leftBox grow basis shrinkOff"
129
+ data-id="boxComponent"
130
+ data-selector-id="box"
131
+ data-test-id="boxComponent"
132
+ >
133
+ <div
134
+ class="titleBox shrinkOff"
135
+ data-id="boxComponent"
136
+ data-selector-id="box"
137
+ data-test-id="boxComponent"
138
+ >
139
+ <div
140
+ class="value basisAuto shrinkOn"
141
+ data-id="boxComponent"
142
+ data-selector-id="box"
143
+ data-test-id="boxComponent"
144
+ >
145
+ text4
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </li>
150
+ <li
151
+ aria-label="text5"
152
+ aria-selected="false"
153
+ class="list medium default disable withBorder flex rowdir vCenter"
154
+ data-a11y-inset-focus="true"
155
+ data-a11y-list-active="false"
156
+ data-id="text5"
157
+ data-selector-id="listItem"
158
+ data-test-id="text5"
159
+ data-title="Limit Reached"
160
+ role="option"
161
+ >
162
+ <div
163
+ class="leftBox grow basis shrinkOff"
164
+ data-id="boxComponent"
165
+ data-selector-id="box"
166
+ data-test-id="boxComponent"
167
+ >
168
+ <div
169
+ class="titleBox shrinkOff"
170
+ data-id="boxComponent"
171
+ data-selector-id="box"
172
+ data-test-id="boxComponent"
173
+ >
174
+ <div
175
+ class="value basisAuto shrinkOn"
176
+ data-id="boxComponent"
177
+ data-selector-id="box"
178
+ data-test-id="boxComponent"
179
+ >
180
+ text5
181
+ </div>
182
+ </div>
183
+ </div>
184
+ </li>
185
+ <li
186
+ aria-label="text6"
187
+ aria-selected="false"
188
+ class="list medium default disable withBorder flex rowdir vCenter"
189
+ data-a11y-inset-focus="true"
190
+ data-a11y-list-active="false"
191
+ data-id="text6"
192
+ data-selector-id="listItem"
193
+ data-test-id="text6"
194
+ data-title="Limit Reached"
195
+ role="option"
196
+ >
197
+ <div
198
+ class="leftBox grow basis shrinkOff"
199
+ data-id="boxComponent"
200
+ data-selector-id="box"
201
+ data-test-id="boxComponent"
202
+ >
203
+ <div
204
+ class="titleBox shrinkOff"
205
+ data-id="boxComponent"
206
+ data-selector-id="box"
207
+ data-test-id="boxComponent"
208
+ >
209
+ <div
210
+ class="value basisAuto shrinkOn"
211
+ data-id="boxComponent"
212
+ data-selector-id="box"
213
+ data-test-id="boxComponent"
214
+ >
215
+ text6
216
+ </div>
217
+ </div>
218
+ </div>
219
+ </li>
220
+ <li
221
+ aria-label="text7"
222
+ aria-selected="false"
223
+ class="list medium default disable withBorder flex rowdir vCenter"
224
+ data-a11y-inset-focus="true"
225
+ data-a11y-list-active="false"
226
+ data-id="text7"
227
+ data-selector-id="listItem"
228
+ data-test-id="text7"
229
+ data-title="Limit Reached"
230
+ role="option"
231
+ >
232
+ <div
233
+ class="leftBox grow basis shrinkOff"
234
+ data-id="boxComponent"
235
+ data-selector-id="box"
236
+ data-test-id="boxComponent"
237
+ >
238
+ <div
239
+ class="titleBox shrinkOff"
240
+ data-id="boxComponent"
241
+ data-selector-id="box"
242
+ data-test-id="boxComponent"
243
+ >
244
+ <div
245
+ class="value basisAuto shrinkOn"
246
+ data-id="boxComponent"
247
+ data-selector-id="box"
248
+ data-test-id="boxComponent"
249
+ >
250
+ text7
251
+ </div>
252
+ </div>
253
+ </div>
254
+ </li>
255
+ <li
256
+ aria-label="text8"
257
+ aria-selected="false"
258
+ class="list medium default disable withBorder flex rowdir vCenter"
259
+ data-a11y-inset-focus="true"
260
+ data-a11y-list-active="false"
261
+ data-id="text8"
262
+ data-selector-id="listItem"
263
+ data-test-id="text8"
264
+ data-title="Limit Reached"
265
+ role="option"
266
+ >
267
+ <div
268
+ class="leftBox grow basis shrinkOff"
269
+ data-id="boxComponent"
270
+ data-selector-id="box"
271
+ data-test-id="boxComponent"
272
+ >
273
+ <div
274
+ class="titleBox shrinkOff"
275
+ data-id="boxComponent"
276
+ data-selector-id="box"
277
+ data-test-id="boxComponent"
278
+ >
279
+ <div
280
+ class="value basisAuto shrinkOn"
281
+ data-id="boxComponent"
282
+ data-selector-id="box"
283
+ data-test-id="boxComponent"
284
+ >
285
+ text8
286
+ </div>
287
+ </div>
288
+ </div>
289
+ </li>
290
+ <li
291
+ aria-label="text9"
292
+ aria-selected="false"
293
+ class="list medium default disable withBorder flex rowdir vCenter"
294
+ data-a11y-inset-focus="true"
295
+ data-a11y-list-active="false"
296
+ data-id="text9"
297
+ data-selector-id="listItem"
298
+ data-test-id="text9"
299
+ data-title="Limit Reached"
300
+ role="option"
301
+ >
302
+ <div
303
+ class="leftBox grow basis shrinkOff"
304
+ data-id="boxComponent"
305
+ data-selector-id="box"
306
+ data-test-id="boxComponent"
307
+ >
308
+ <div
309
+ class="titleBox shrinkOff"
310
+ data-id="boxComponent"
311
+ data-selector-id="box"
312
+ data-test-id="boxComponent"
313
+ >
314
+ <div
315
+ class="value basisAuto shrinkOn"
316
+ data-id="boxComponent"
317
+ data-selector-id="box"
318
+ data-test-id="boxComponent"
319
+ >
320
+ text9
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </li>
325
+ <li
326
+ aria-label="text10"
327
+ aria-selected="false"
328
+ class="list medium default disable withBorder flex rowdir vCenter"
329
+ data-a11y-inset-focus="true"
330
+ data-a11y-list-active="false"
331
+ data-id="text10"
332
+ data-selector-id="listItem"
333
+ data-test-id="text10"
334
+ data-title="Limit Reached"
335
+ role="option"
336
+ >
337
+ <div
338
+ class="leftBox grow basis shrinkOff"
339
+ data-id="boxComponent"
340
+ data-selector-id="box"
341
+ data-test-id="boxComponent"
342
+ >
343
+ <div
344
+ class="titleBox shrinkOff"
345
+ data-id="boxComponent"
346
+ data-selector-id="box"
347
+ data-test-id="boxComponent"
348
+ >
349
+ <div
350
+ class="value basisAuto shrinkOn"
351
+ data-id="boxComponent"
352
+ data-selector-id="box"
353
+ data-test-id="boxComponent"
354
+ >
355
+ text10
356
+ </div>
357
+ </div>
358
+ </div>
359
+ </li>
360
+ </div>
361
+ </div>
362
+ </DocumentFragment>
363
+ `;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MULTISELECT_I18N_KEYS = void 0;
7
+ var MULTISELECT_I18N_KEYS = {
8
+ limitReachedMessage: 'Limit reached',
9
+ searchText: 'Searching...',
10
+ clearText: 'Clear all',
11
+ loadingText: 'Loading'
12
+ };
13
+ exports.MULTISELECT_I18N_KEYS = MULTISELECT_I18N_KEYS;
@@ -56,11 +56,13 @@ var MultiSelect_propTypes = {
56
56
  getRef: _propTypes["default"].func,
57
57
  getTargetRef: _propTypes["default"].func,
58
58
  i18nKeys: _propTypes["default"].shape({
59
+ searchText: _propTypes["default"].string,
59
60
  clearText: _propTypes["default"].string,
60
61
  loadingText: _propTypes["default"].string,
61
62
  emptyText: _propTypes["default"].string,
62
63
  noMoreText: _propTypes["default"].string,
63
- searchEmptyText: _propTypes["default"].string
64
+ searchEmptyText: _propTypes["default"].string,
65
+ limitReachedMessage: _propTypes["default"].string
64
66
  }),
65
67
  a11y: _propTypes["default"].shape({
66
68
  clearLabel: _propTypes["default"].string
@@ -135,7 +137,8 @@ var MultiSelect_propTypes = {
135
137
  isFocus: _propTypes["default"].bool,
136
138
  allowValueFallback: _propTypes["default"].bool,
137
139
  renderCustomClearComponent: _propTypes["default"].func,
138
- renderCustomToggleIndicator: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].node])
140
+ renderCustomToggleIndicator: _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].node]),
141
+ limit: _propTypes["default"].number
139
142
  };
140
143
  exports.MultiSelect_propTypes = MultiSelect_propTypes;
141
144
  var MultiSelectHeader_propTypes = {
@@ -176,7 +179,8 @@ var SelectedOptions_propTypes = {
176
179
  })),
177
180
  size: _propTypes["default"].oneOf(['medium', 'xmedium']),
178
181
  palette: _propTypes["default"].string,
179
- dataId: _propTypes["default"].string
182
+ dataId: _propTypes["default"].string,
183
+ limit: _propTypes["default"].number
180
184
  };
181
185
  exports.SelectedOptions_propTypes = SelectedOptions_propTypes;
182
186
  var Suggestions_propTypes = {
@@ -207,7 +211,9 @@ var Suggestions_propTypes = {
207
211
  logo: _propTypes["default"].string,
208
212
  optionType: _propTypes["default"].string,
209
213
  listItemProps: _propTypes["default"].object
210
- }))
214
+ })),
215
+ limit: _propTypes["default"].number,
216
+ limitReachedMessage: _propTypes["default"].string
211
217
  };
212
218
  exports.Suggestions_propTypes = Suggestions_propTypes;
213
219
  var AdvancedGroupMultiSelect_propTypes = (_AdvancedGroupMultiSe = {
@@ -226,7 +232,8 @@ var AdvancedGroupMultiSelect_propTypes = (_AdvancedGroupMultiSe = {
226
232
  loadingText: _propTypes["default"].string,
227
233
  emptyText: _propTypes["default"].string,
228
234
  noMoreText: _propTypes["default"].string,
229
- searchEmptyText: _propTypes["default"].string
235
+ searchEmptyText: _propTypes["default"].string,
236
+ limitReachedMessage: _propTypes["default"].string
230
237
  }),
231
238
  a11y: _propTypes["default"].shape({
232
239
  clearLabel: _propTypes["default"].string
@@ -278,7 +285,7 @@ var AdvancedGroupMultiSelect_propTypes = (_AdvancedGroupMultiSe = {
278
285
  needToCloseOnSelect: _propTypes["default"].func,
279
286
  searchStr: _propTypes["default"].string,
280
287
  children: _propTypes["default"].node
281
- }, _defineProperty(_AdvancedGroupMultiSe, "dataSelectorId", _propTypes["default"].string), _defineProperty(_AdvancedGroupMultiSe, "isFocus", _propTypes["default"].bool), _defineProperty(_AdvancedGroupMultiSe, "allowValueFallback", _propTypes["default"].bool), _AdvancedGroupMultiSe);
288
+ }, _defineProperty(_AdvancedGroupMultiSe, "dataSelectorId", _propTypes["default"].string), _defineProperty(_AdvancedGroupMultiSe, "isFocus", _propTypes["default"].bool), _defineProperty(_AdvancedGroupMultiSe, "allowValueFallback", _propTypes["default"].bool), _defineProperty(_AdvancedGroupMultiSe, "limit", _propTypes["default"].number), _AdvancedGroupMultiSe);
282
289
  exports.AdvancedGroupMultiSelect_propTypes = AdvancedGroupMultiSelect_propTypes;
283
290
 
284
291
  var AdvancedMultiSelect_propTypes = _objectSpread(_objectSpread({}, MultiSelect_propTypes), {}, {
@@ -293,70 +300,22 @@ var AdvancedMultiSelect_propTypes = _objectSpread(_objectSpread({}, MultiSelect_
293
300
  selectedOptions: _propTypes["default"].arrayOf(_propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])).isRequired,
294
301
  selectedOptionsLimit: _propTypes["default"].number,
295
302
  getSelectedOptionDetails: _propTypes["default"].func,
296
- emptyMessage: _propTypes["default"].string.isRequired,
297
- isDisabled: _propTypes["default"].bool,
298
- isReadOnly: _propTypes["default"].bool,
299
- needLocalSearch: _propTypes["default"].bool,
300
- needSelectAll: _propTypes["default"].bool,
301
- onChange: _propTypes["default"].func.isRequired,
302
- searchEmptyMessage: _propTypes["default"].string,
303
- placeHolder: _propTypes["default"].string,
304
- selectAllText: _propTypes["default"].string,
305
- textField: _propTypes["default"].string,
306
- valueField: _propTypes["default"].string,
307
303
  imageField: _propTypes["default"].string,
308
304
  iconName: _propTypes["default"].string,
309
305
  prefixText: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
310
306
  //For grouping multiSelect
311
307
  optionType: _propTypes["default"].oneOf(['default', 'avatar', 'icon']),
312
- needEffect: _propTypes["default"].bool,
313
308
  secondaryField: _propTypes["default"].string,
314
- animationStyle: _propTypes["default"].string,
315
- defaultDropBoxPosition: _propTypes["default"].oneOf(['bottom', 'top', 'left', 'right']),
316
- dropBoxSize: _propTypes["default"].oneOf(['small', 'medium', 'large']),
317
- isAnimate: _propTypes["default"].bool,
318
- size: _propTypes["default"].oneOf(['medium', 'xmedium']),
319
- textBoxSize: _propTypes["default"].oneOf(['small', 'medium', 'xmedium']),
320
- title: _propTypes["default"].string,
321
- variant: _propTypes["default"].string,
322
309
  dataIdClearIcon: _propTypes["default"].string,
323
310
  dataIdLoading: _propTypes["default"].string,
324
311
  dataIdMultiSelectComp: _propTypes["default"].string,
325
312
  dataIdSelectAllEle: _propTypes["default"].string,
326
-
327
- /**** Popup Props ****/
328
- isPopupOpen: _propTypes["default"].bool,
329
- isPopupReady: _propTypes["default"].bool,
330
- togglePopup: _propTypes["default"].func,
331
- getContainerRef: _propTypes["default"].func,
332
- position: _propTypes["default"].string,
333
- removeClose: _propTypes["default"].func,
334
313
  listItemSize: _propTypes["default"].oneOf(['small', 'medium', 'large']),
335
- needBorder: _propTypes["default"].bool,
336
- htmlId: _propTypes["default"].string,
337
- i18nKeys: _propTypes["default"].shape({
338
- clearText: _propTypes["default"].string,
339
- loadingText: _propTypes["default"].string,
340
- emptyText: _propTypes["default"].string,
341
- noMoreText: _propTypes["default"].string,
342
- searchEmptyText: _propTypes["default"].string
343
- }),
344
- a11y: _propTypes["default"].shape({
345
- clearLabel: _propTypes["default"].string
346
- }),
347
- borderColor: _propTypes["default"].oneOf(['transparent', 'default', 'dark']),
348
- isBoxPaddingNeed: _propTypes["default"].bool,
349
- isSearchClearOnSelect: _propTypes["default"].bool,
350
- disabledOptions: _propTypes["default"].arrayOf(_propTypes["default"].string),
351
- getFooter: _propTypes["default"].func,
352
314
  customProps: _propTypes["default"].shape({
353
315
  SuggestionsProps: _propTypes["default"].object,
354
316
  DropBoxProps: _propTypes["default"].object
355
317
  }),
356
- isLoading: _propTypes["default"].bool,
357
- dataSelectorId: _propTypes["default"].string,
358
- customClass: _propTypes["default"].object,
359
- isFocus: _propTypes["default"].bool
318
+ customClass: _propTypes["default"].object
360
319
  });
361
320
 
362
321
  exports.AdvancedMultiSelect_propTypes = AdvancedMultiSelect_propTypes;
@@ -52,6 +52,10 @@ var getOptionsOrder = function getOptionsOrder(props) {
52
52
  return props.optionsOrder || dummyArray;
53
53
  };
54
54
 
55
+ var getLimit = function getLimit(props) {
56
+ return props.limit || 0;
57
+ };
58
+
55
59
  var getSelectedOptionsSel = function getSelectedOptionsSel(props) {
56
60
  return props.selectedOptions || dummyArray;
57
61
  };
@@ -339,7 +343,7 @@ var makeFormatOptions = function makeFormatOptions() {
339
343
  exports.makeFormatOptions = makeFormatOptions;
340
344
 
341
345
  var makeGetMultiSelectSelectedOptions = function makeGetMultiSelectSelectedOptions() {
342
- return (0, _reselect.createSelector)([getSelectedOptionsSel, getNormalizedFormatOptions, getSelectedOptionsLength, getAllowValueFallback], function (selectedOptions, normalizedFormatOptions, selectedOptionsLength, allowValueFallback) {
346
+ return (0, _reselect.createSelector)([getSelectedOptionsSel, getNormalizedFormatOptions, getSelectedOptionsLength, getAllowValueFallback, getLimit], function (selectedOptions, normalizedFormatOptions, selectedOptionsLength, allowValueFallback, limit) {
343
347
  var output = [];
344
348
  var revampSelectedOptions = [];
345
349
  var normalizedSelectedOptions = {};
@@ -367,6 +371,12 @@ var makeGetMultiSelectSelectedOptions = function makeGetMultiSelectSelectedOptio
367
371
  }
368
372
  }
369
373
 
374
+ if (limit && limit > 0) {
375
+ output = output.slice(0, limit);
376
+ revampSelectedOptions = revampSelectedOptions.slice(0, limit);
377
+ normalizedSelectedOptions = Object.fromEntries(Object.entries(normalizedSelectedOptions).slice(0, limit));
378
+ }
379
+
370
380
  return {
371
381
  formatSelectedOptions: output,
372
382
  normalizedSelectedOptions: normalizedSelectedOptions,
@@ -593,7 +603,8 @@ var filterSelectedOptions = function filterSelectedOptions() {
593
603
  _ref4$propSelectedOpt = _ref4.propSelectedOptions,
594
604
  propSelectedOptions = _ref4$propSelectedOpt === void 0 ? dummyArray : _ref4$propSelectedOpt,
595
605
  _ref4$disabledOptions = _ref4.disabledOptions,
596
- disabledOptions = _ref4$disabledOptions === void 0 ? dummyArray : _ref4$disabledOptions;
606
+ disabledOptions = _ref4$disabledOptions === void 0 ? dummyArray : _ref4$disabledOptions,
607
+ limit = _ref4.limit;
597
608
 
598
609
  // eslint-disable-next-line no-param-reassign
599
610
  selectedOptions = selectedOptions || dummyArray; // eslint-disable-next-line no-param-reassign
@@ -617,8 +628,18 @@ var filterSelectedOptions = function filterSelectedOptions() {
617
628
 
618
629
  return true;
619
630
  });
631
+ var totalSelectedOptions = [].concat(_toConsumableArray(oldValidSelectedOptions), _toConsumableArray(newlyAddedOptions));
632
+
633
+ if (limit && limit > 0) {
634
+ if (totalSelectedOptions.length > limit) {
635
+ return {
636
+ newSelectedOptions: totalSelectedOptions.slice(0, limit)
637
+ };
638
+ }
639
+ }
640
+
620
641
  return {
621
- newSelectedOptions: [].concat(_toConsumableArray(oldValidSelectedOptions), _toConsumableArray(newlyAddedOptions))
642
+ newSelectedOptions: totalSelectedOptions
622
643
  };
623
644
  };
624
645
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohodesk/components",
3
- "version": "1.4.8",
3
+ "version": "1.4.9",
4
4
  "main": "es/index.js",
5
5
  "module": "es/index.js",
6
6
  "private": false,
@@ -77,18 +77,19 @@
77
77
  "@zohodesk-private/css-variable-migrator": "1.0.9",
78
78
  "@zohodesk-private/node-plugins": "1.1.13",
79
79
  "@zohodesk-private/react-prop-validator": "1.2.3",
80
- "@zohodesk/a11y": "2.3.6",
80
+ "@zohodesk/a11y": "2.3.7",
81
81
  "@zohodesk/docstool": "1.0.0-alpha-2",
82
82
  "@zohodesk/dotkit": "1.0.3",
83
83
  "@zohodesk/hooks": "2.0.5",
84
84
  "@zohodesk/icons": "1.1.0",
85
85
  "@zohodesk/layout": "3.1.0",
86
- "@zohodesk/svg": "1.2.1",
86
+ "@zohodesk/svg": "1.2.2",
87
87
  "@zohodesk/utils": "1.3.14",
88
88
  "@zohodesk/variables": "1.1.0",
89
89
  "@zohodesk/virtualizer": "1.0.3",
90
90
  "react-sortable-hoc": "^0.8.3",
91
- "velocity-react": "1.4.3"
91
+ "velocity-react": "1.4.3",
92
+ "@zohodesk/react-cli": "1.1.27"
92
93
  },
93
94
  "dependencies": {
94
95
  "hoist-non-react-statics": "3.0.1",
@@ -99,13 +100,13 @@
99
100
  "peerDependencies": {
100
101
  "@zohodesk/icons": "1.1.0",
101
102
  "@zohodesk/variables": "1.1.0",
102
- "@zohodesk/svg": "1.2.1",
103
+ "@zohodesk/svg": "1.2.2",
103
104
  "@zohodesk/virtualizer": "1.0.3",
104
105
  "velocity-react": "1.4.3",
105
106
  "react-sortable-hoc": "^0.8.3",
106
107
  "@zohodesk/hooks": "2.0.5",
107
108
  "@zohodesk/utils": "1.3.14",
108
- "@zohodesk/a11y": "2.3.6",
109
+ "@zohodesk/a11y": "2.3.7",
109
110
  "@zohodesk/layout": "3.1.0",
110
111
  "@zohodesk/dotkit": "1.0.3"
111
112
  }