@zohodesk/components 1.4.7 → 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 (47) hide show
  1. package/.cli/propValidation_report.html +1 -1
  2. package/README.md +17 -4
  3. package/es/Accordion/Accordion.js +1 -1
  4. package/es/Card/Card.js +1 -1
  5. package/es/MultiSelect/AdvancedGroupMultiSelect.js +16 -8
  6. package/es/MultiSelect/AdvancedMultiSelect.js +13 -6
  7. package/es/MultiSelect/EmptyState.js +2 -1
  8. package/es/MultiSelect/MultiSelect.js +27 -16
  9. package/es/MultiSelect/MultiSelectWithAvatar.js +9 -2
  10. package/es/MultiSelect/SelectedOptions.js +4 -2
  11. package/es/MultiSelect/Suggestions.js +10 -2
  12. package/es/MultiSelect/__tests__/MultiSelect.spec.js +25 -0
  13. package/es/MultiSelect/__tests__/Suggestions.spec.js +58 -0
  14. package/es/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +253 -0
  15. package/es/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +343 -0
  16. package/es/MultiSelect/constants.js +6 -0
  17. package/es/MultiSelect/props/propTypes.js +15 -55
  18. package/es/Popup/Popup.js +45 -17
  19. package/es/Popup/Registry.js +1 -0
  20. package/es/Select/Select.js +1 -1
  21. package/es/Select/__tests__/Select.spec.js +8 -1
  22. package/es/utils/dropDownUtils.js +25 -6
  23. package/es/v1/Popup/Popup.js +1 -1
  24. package/es/v1/Select/Select.js +1 -1
  25. package/lib/Accordion/Accordion.js +2 -2
  26. package/lib/Card/Card.js +2 -2
  27. package/lib/MultiSelect/AdvancedGroupMultiSelect.js +94 -83
  28. package/lib/MultiSelect/AdvancedMultiSelect.js +16 -7
  29. package/lib/MultiSelect/EmptyState.js +3 -1
  30. package/lib/MultiSelect/MultiSelect.js +30 -17
  31. package/lib/MultiSelect/MultiSelectWithAvatar.js +11 -3
  32. package/lib/MultiSelect/SelectedOptions.js +4 -2
  33. package/lib/MultiSelect/Suggestions.js +10 -2
  34. package/lib/MultiSelect/__tests__/MultiSelect.spec.js +25 -0
  35. package/lib/MultiSelect/__tests__/Suggestions.spec.js +58 -0
  36. package/lib/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +253 -0
  37. package/lib/MultiSelect/__tests__/__snapshots__/Suggestions.spec.js.snap +343 -0
  38. package/lib/MultiSelect/constants.js +13 -0
  39. package/lib/MultiSelect/props/propTypes.js +14 -55
  40. package/lib/Popup/Popup.js +54 -18
  41. package/lib/Popup/Registry.js +1 -0
  42. package/lib/Select/Select.js +2 -2
  43. package/lib/Select/__tests__/Select.spec.js +8 -1
  44. package/lib/utils/dropDownUtils.js +24 -3
  45. package/lib/v1/Popup/Popup.js +2 -2
  46. package/lib/v1/Select/Select.js +2 -2
  47. package/package.json +11 -9
@@ -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;
@@ -236,7 +236,11 @@ var Popup = function Popup(Component) {
236
236
  _this.handleDropElementStyleUpdate = _this.handleDropElementStyleUpdate.bind(_assertThisInitialized(_this));
237
237
  _this.positionRef = /*#__PURE__*/_react["default"].createRef();
238
238
  _this.rootElement = _Registry["default"].getRootElement();
239
- _this.popupObserver = new _ResizeObserver["default"](_this.handlePopupResize); //dropBoxSize
239
+ _this.popupObserver = new _ResizeObserver["default"](_this.handlePopupResize);
240
+ _this.cancelRaf = _this.cancelRaf.bind(_assertThisInitialized(_this));
241
+ _this.cancelPendingAnimationFrames = _this.cancelPendingAnimationFrames.bind(_assertThisInitialized(_this));
242
+ _this.setPositionRafId = null;
243
+ _this.resizePositionRafId = null; //dropBoxSize
240
244
 
241
245
  _this.size = null;
242
246
  _this.isTargetElementVisible = false;
@@ -262,18 +266,21 @@ var Popup = function Popup(Component) {
262
266
  groupPopups.push(this);
263
267
  _Registry["default"].popups[group] = groupPopups;
264
268
 
265
- if (Object.keys(_Registry["default"].popups).length === 1 && groupPopups.length === 1) {
266
- this.updateListeners(true, CLICK_EVENTS, document);
267
- document.addEventListener('keyup', this.documentKeyupHandler, false); // document.addEventListener('scroll', this.handleScroll, true);
269
+ if (Object.keys(_Registry["default"].popups).length === 1 && groupPopups.length === 1 && _Registry["default"].listenerPopupRef === undefined) {
270
+ _Registry["default"].listenerPopupRef = this;
268
271
 
269
- window.addEventListener('resize', this.handleResize);
270
- document.addEventListener('mousedown', this.handleDocumentMouseDown, true);
271
- document.addEventListener('focus', this.handleDocumentFocus, true);
272
+ _Registry["default"].listenerPopupRef.updateListeners(true, CLICK_EVENTS, document);
273
+
274
+ document.addEventListener('keyup', _Registry["default"].listenerPopupRef.documentKeyupHandler, false); // document.addEventListener('scroll', Registry.listenerPopupRef.handleScroll, true);
275
+
276
+ window.addEventListener('resize', _Registry["default"].listenerPopupRef.handleResize);
277
+ document.addEventListener('mousedown', _Registry["default"].listenerPopupRef.handleDocumentMouseDown, true);
278
+ document.addEventListener('focus', _Registry["default"].listenerPopupRef.handleDocumentFocus, true);
272
279
  }
273
280
  }
274
281
  }, {
275
- key: "componentWillReceiveProps",
276
- value: function componentWillReceiveProps(nextProps) {
282
+ key: "UNSAFE_componentWillReceiveProps",
283
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
277
284
  var isPopupOpen = this.state.isPopupOpen;
278
285
 
279
286
  if (typeof nextProps.isPopupOpen !== 'undefined' && nextProps.isPopupOpen !== isPopupOpen) {
@@ -337,6 +344,22 @@ var Popup = function Popup(Component) {
337
344
  this.handleIframeEventListeners(shouldAdd, CLICK_EVENTS);
338
345
  }
339
346
  }
347
+ }, {
348
+ key: "cancelRaf",
349
+ value: function cancelRaf(refName) {
350
+ var id = this[refName];
351
+
352
+ if (id) {
353
+ cancelAnimationFrame(id);
354
+ this[refName] = null;
355
+ }
356
+ }
357
+ }, {
358
+ key: "cancelPendingAnimationFrames",
359
+ value: function cancelPendingAnimationFrames() {
360
+ this.cancelRaf('setPositionRafId');
361
+ this.cancelRaf('resizePositionRafId');
362
+ }
340
363
  }, {
341
364
  key: "componentWillUnmount",
342
365
  value: function componentWillUnmount() {
@@ -371,14 +394,18 @@ var Popup = function Popup(Component) {
371
394
  this.popupObserver.disconnect();
372
395
  }
373
396
 
374
- if (noPopups) {
375
- this.updateListeners(false, CLICK_EVENTS, document);
376
- document.removeEventListener('keyup', this.documentKeyupHandler); // document.removeEventListener('scroll', this.handleScroll);
397
+ if (noPopups && _Registry["default"].listenerPopupRef !== undefined) {
398
+ _Registry["default"].listenerPopupRef.updateListeners(false, CLICK_EVENTS, document);
377
399
 
378
- window.removeEventListener('resize', this.handleResize);
379
- document.removeEventListener('mousedown', this.handleDocumentMouseDown, true);
380
- document.removeEventListener('focus', this.handleDocumentFocus, true);
400
+ document.removeEventListener('keyup', _Registry["default"].listenerPopupRef.documentKeyupHandler); // document.removeEventListener('scroll', Registry.listenerPopupRef.handleScroll);
401
+
402
+ window.removeEventListener('resize', _Registry["default"].listenerPopupRef.handleResize);
403
+ document.removeEventListener('mousedown', _Registry["default"].listenerPopupRef.handleDocumentMouseDown, true);
404
+ document.removeEventListener('focus', _Registry["default"].listenerPopupRef.handleDocumentFocus, true);
405
+ _Registry["default"].listenerPopupRef = undefined;
381
406
  }
407
+
408
+ this.cancelPendingAnimationFrames();
382
409
  }
383
410
  }, {
384
411
  key: "handleAddingScrollBlock",
@@ -906,13 +933,15 @@ var Popup = function Popup(Component) {
906
933
  }
907
934
 
908
935
  var setPosition = function setPosition() {
909
- requestAnimationFrame(function () {
936
+ _this6.cancelRaf('setPositionRafId');
937
+
938
+ _this6.setPositionRafId = requestAnimationFrame(function () {
910
939
  var placeHolderElement = _this6.placeHolderElement,
911
940
  dropElement = _this6.dropElement;
912
941
  var _this6$state = _this6.state,
913
942
  position = _this6$state.position,
914
943
  isPopupReady = _this6$state.isPopupReady;
915
- var scrollContainer = placeHolderElement.closest('[data-scroll=true]') || document.body;
944
+ var scrollContainer = placeHolderElement ? placeHolderElement.closest('[data-scroll=true]') || document.body : document.body;
916
945
 
917
946
  var betterPosition = _viewPort["default"].betterView(dropElement, placeHolderElement, defaultPosition, scrollContainer, {
918
947
  needArrow: needArrow,
@@ -942,6 +971,8 @@ var Popup = function Popup(Component) {
942
971
  _this6.updatePopupState(view, views, viewsOffset, targetOffset, popupOffset, isAbsolute);
943
972
  }
944
973
  }
974
+
975
+ _this6.setPositionRafId = null;
945
976
  });
946
977
  };
947
978
 
@@ -974,7 +1005,10 @@ var Popup = function Popup(Component) {
974
1005
 
975
1006
  if (placeHolderElement && dropElement) {
976
1007
  var scrollContainer = placeHolderElement.closest('[data-scroll=true]') || document.body;
977
- requestAnimationFrame(function () {
1008
+
1009
+ _this7.cancelRaf('resizePositionRafId');
1010
+
1011
+ _this7.resizePositionRafId = requestAnimationFrame(function () {
978
1012
  var needArrow = _this7.getNeedArrow(popup);
979
1013
 
980
1014
  var isAbsolute = _this7.getIsAbsolutePopup(popup);
@@ -1045,6 +1079,8 @@ var Popup = function Popup(Component) {
1045
1079
  // });
1046
1080
  // }
1047
1081
 
1082
+
1083
+ _this7.resizePositionRafId = null;
1048
1084
  });
1049
1085
  }
1050
1086
  }
@@ -10,6 +10,7 @@ var _Config = require("../Provider/Config.js");
10
10
  var Registry = {
11
11
  lastOpenedGroup: [],
12
12
  popups: {},
13
+ listenerPopupRef: undefined,
13
14
  scrollBlockedListenerPopupRef: undefined,
14
15
  scrollableListenerPopupRef: undefined,
15
16
  getOpenedPopups: function getOpenedPopups() {
@@ -184,8 +184,8 @@ var SelectComponent = /*#__PURE__*/function (_Component) {
184
184
  // suggestionContainer.addEventListener('scroll', this.handleScroll);
185
185
  }
186
186
  }, {
187
- key: "componentWillReceiveProps",
188
- value: function componentWillReceiveProps(nextProps) {
187
+ key: "UNSAFE_componentWillReceiveProps",
188
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
189
189
  var selectedValue = nextProps.selectedValue,
190
190
  isDefaultSelectValue = nextProps.isDefaultSelectValue,
191
191
  valueField = nextProps.valueField,
@@ -294,7 +294,14 @@ describe('Select -', function () {
294
294
 
295
295
  expect(getAllByRole(listItemRole)).toHaveLength(1);
296
296
  expect(asFragment()).toMatchSnapshot();
297
- });
297
+ }); // test('Should render the only options matching search value even with additional spaces before and after', () => {
298
+ // const { getByRole, getAllByRole, asFragment, getByTestId } = render(<Select needSearch options={options} />);
299
+ // userEvent.click(getByRole(selectInputRole));
300
+ // userEvent.type(within(getByTestId(dropboxTestId)).getByRole('textbox'), ' 2 ');
301
+ // expect(getAllByRole(listItemRole)).toHaveLength(1);
302
+ // expect(asFragment()).toMatchSnapshot();
303
+ // });
304
+
298
305
  test('Should trigger given onSearch, when type on the search input', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
299
306
  var mockOnSearch, _render15, getByRole, getByTestId;
300
307
 
@@ -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
 
@@ -186,8 +186,8 @@ var Popup = function Popup(Component) {
186
186
  }
187
187
  }
188
188
  }, {
189
- key: "componentWillReceiveProps",
190
- value: function componentWillReceiveProps(nextProps) {
189
+ key: "UNSAFE_componentWillReceiveProps",
190
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
191
191
  var isPopupOpen = this.state.isPopupOpen;
192
192
 
193
193
  if (typeof nextProps.isPopupOpen !== 'undefined' && nextProps.isPopupOpen !== isPopupOpen) {
@@ -185,8 +185,8 @@ var SelectComponent = /*#__PURE__*/function (_Component) {
185
185
  // suggestionContainer.addEventListener('scroll', this.handleScroll);
186
186
  }
187
187
  }, {
188
- key: "componentWillReceiveProps",
189
- value: function componentWillReceiveProps(nextProps) {
188
+ key: "UNSAFE_componentWillReceiveProps",
189
+ value: function UNSAFE_componentWillReceiveProps(nextProps) {
190
190
  var selectedValue = nextProps.selectedValue,
191
191
  isDefaultSelectValue = nextProps.isDefaultSelectValue,
192
192
  valueField = nextProps.valueField,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohodesk/components",
3
- "version": "1.4.7",
3
+ "version": "1.4.9",
4
4
  "main": "es/index.js",
5
5
  "module": "es/index.js",
6
6
  "private": false,
@@ -18,9 +18,10 @@
18
18
  ],
19
19
  "scripts": {
20
20
  "build:docs": "react-cli build:docs",
21
- "lint": "react-cli lint",
21
+ "_lint": "react-cli lint",
22
22
  "lintAll": "react-cli lint ./src",
23
23
  "lintAllFix": "npm run lintAll --eslint:fix=true",
24
+ "lint": "npx eslint ./src",
24
25
  "clean": "react-cli clean build unittest coverage es lib assets && mkdir assets",
25
26
  "dubCheck": "node ./node_modules/@zohodesk-private/node-plugins/es/dublication_css_file_finder node_modules/@zohodesk/icons/es node_modules/@zohodesk/variables/es",
26
27
  "init": "npm run clean && cd ../assets && npm run componentsassets && cd ../components && npm run build:variables",
@@ -47,7 +48,7 @@
47
48
  "snap-update": "npm run test-clean && npm run test -- -u",
48
49
  "sstest": "npm run init && react-cli sstest",
49
50
  "build:external": "npm run clean && npm run init && npm run docsjs:build && npm run build:externalDocCopy && react-cli build:component:umd && npm run externalDocHTMLChange",
50
- "download": "react-cli clean ./node_modules ./package-lock.json && npm install",
51
+ "download": "react-cli clean ./node_modules ./package-lock.json && npm install && cd ../ && npm run download",
51
52
  "expublish": "npm publish --tag experimental-version",
52
53
  "css:lineheight:validate": "node ./node_modules/@zohodesk-private/node-plugins/es/lineheight_automation/lineHeightErrorCheck.js ./src/",
53
54
  "cssVariableConvert": "react-cli variableConverter ./lib ./lib && react-cli variableConverter ./es ./es",
@@ -73,21 +74,22 @@
73
74
  "@testing-library/react-hooks": "^7.0.2",
74
75
  "@testing-library/user-event": "^13.0.10",
75
76
  "@zohodesk-private/color-variable-preprocessor": "1.2.0",
76
- "@zohodesk-private/css-variable-migrator": "^1.0.8",
77
+ "@zohodesk-private/css-variable-migrator": "1.0.9",
77
78
  "@zohodesk-private/node-plugins": "1.1.13",
78
79
  "@zohodesk-private/react-prop-validator": "1.2.3",
79
- "@zohodesk/a11y": "2.3.6",
80
+ "@zohodesk/a11y": "2.3.7",
80
81
  "@zohodesk/docstool": "1.0.0-alpha-2",
81
82
  "@zohodesk/dotkit": "1.0.3",
82
83
  "@zohodesk/hooks": "2.0.5",
83
84
  "@zohodesk/icons": "1.1.0",
84
85
  "@zohodesk/layout": "3.1.0",
85
- "@zohodesk/svg": "1.2.1",
86
+ "@zohodesk/svg": "1.2.2",
86
87
  "@zohodesk/utils": "1.3.14",
87
88
  "@zohodesk/variables": "1.1.0",
88
89
  "@zohodesk/virtualizer": "1.0.3",
89
90
  "react-sortable-hoc": "^0.8.3",
90
- "velocity-react": "1.4.3"
91
+ "velocity-react": "1.4.3",
92
+ "@zohodesk/react-cli": "1.1.27"
91
93
  },
92
94
  "dependencies": {
93
95
  "hoist-non-react-statics": "3.0.1",
@@ -98,13 +100,13 @@
98
100
  "peerDependencies": {
99
101
  "@zohodesk/icons": "1.1.0",
100
102
  "@zohodesk/variables": "1.1.0",
101
- "@zohodesk/svg": "1.2.1",
103
+ "@zohodesk/svg": "1.2.2",
102
104
  "@zohodesk/virtualizer": "1.0.3",
103
105
  "velocity-react": "1.4.3",
104
106
  "react-sortable-hoc": "^0.8.3",
105
107
  "@zohodesk/hooks": "2.0.5",
106
108
  "@zohodesk/utils": "1.3.14",
107
- "@zohodesk/a11y": "2.3.6",
109
+ "@zohodesk/a11y": "2.3.7",
108
110
  "@zohodesk/layout": "3.1.0",
109
111
  "@zohodesk/dotkit": "1.0.3"
110
112
  }