@zohodesk/components 1.0.0-alpha-228 → 1.0.0-alpha-229

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/README.md CHANGED
@@ -32,6 +32,10 @@ In this Package, we Provide Some Basic Components to Build Web App
32
32
  - TextBoxIcon
33
33
  - Tooltip
34
34
 
35
+ # 1.0.0-alpha-229
36
+
37
+ - MultiSelect, AdvancedMultiSelect => disabledOption Clear icon handled properly
38
+
35
39
  # 1.0.0-alpha-228
36
40
 
37
41
  - Button => danger, primary loader color issue solved
@@ -23,7 +23,7 @@ import style from './AdvancedMultiSelect.module.css';
23
23
  /**** Methods ****/
24
24
 
25
25
  import { getIsEmptyValue, getSearchString } from '../utils/Common.js';
26
- import { filterSelectedOptions } from '../utils/dropDownUtils';
26
+ import { filterSelectedOptions, makeGetIsShowClearIcon } from '../utils/dropDownUtils';
27
27
  /* eslint-disable react/sort-prop-types */
28
28
 
29
29
  /* eslint-disable react/no-unused-prop-types */
@@ -45,6 +45,7 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
45
45
  this.state = Object.assign({}, oldState, {
46
46
  showedSelectedOptionsCount: !getIsEmptyValue(selectedOptionsLimit) && selectedOptionsLen > selectedOptionsLimit ? selectedOptionsLimit : selectedOptionsLen
47
47
  });
48
+ this.getIsShowClearIcon = makeGetIsShowClearIcon();
48
49
  this.handleFilterSuggestions = this.handleFilterSuggestions.bind(this);
49
50
  this.handleChange = this.handleChange.bind(this);
50
51
  this.handleSelectOption = this.handleSelectOption.bind(this);
@@ -191,7 +192,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
191
192
  imageField,
192
193
  optionType,
193
194
  iconName,
194
- iconSize
195
+ iconSize,
196
+ disabledOptions
195
197
  } = props;
196
198
  return this.formatSelectedOptions({
197
199
  options: selectedOptionDetails,
@@ -200,7 +202,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
200
202
  imageField,
201
203
  optionType,
202
204
  iconName,
203
- iconSize
205
+ iconSize,
206
+ disabledOptions
204
207
  });
205
208
  }
206
209
 
@@ -350,7 +353,8 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
350
353
  isBoxPaddingNeed,
351
354
  getFooter,
352
355
  customProps,
353
- needEffect
356
+ needEffect,
357
+ disabledOptions
354
358
  } = this.props;
355
359
  let {
356
360
  SuggestionsProps = {},
@@ -382,6 +386,13 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
382
386
  const moreCount = allselectedOptionIdsLen - showedSelectedOptionsCount;
383
387
  const setAriaId = this.getNextAriaId();
384
388
  const ariaErrorId = this.getNextAriaId();
389
+ let {
390
+ isShowClearIcon: isShowClear
391
+ } = this.getIsShowClearIcon({
392
+ selectedOptions,
393
+ disabledOptions
394
+ });
395
+ let isShowClearIcon = !isReadOnly && !isDisabled && isShowClear;
385
396
  return /*#__PURE__*/React.createElement("div", {
386
397
  className: `${style.wrapper} ${isDisabled ? style.disabled : ''} ${borderColor === 'transparent' ? style.transparentContainer : ''} ${needEffect && !(isDisabled || isReadOnly) ? style.effect : ''}`,
387
398
  "data-id": dataIdMultiSelectComp,
@@ -431,7 +442,7 @@ export class AdvancedMultiSelectComponent extends MultiSelectComponent {
431
442
  ariaDescribedby: ariaErrorId
432
443
  },
433
444
  autoComplete: false
434
- })), !isReadOnly && !isDisabled && selectedOptions.length > 1 ? /*#__PURE__*/React.createElement(Box, {
445
+ })), isShowClearIcon ? /*#__PURE__*/React.createElement(Box, {
435
446
  className: style.delete,
436
447
  dataId: dataIdClearIcon,
437
448
  "data-title": clearText,
@@ -23,7 +23,7 @@ import style from './MultiSelect.module.css';
23
23
  /**** Methods ****/
24
24
 
25
25
  import { debounce, scrollTo, bind, getIsEmptyValue, getSearchString } from '../utils/Common.js';
26
- import { makeFormatOptions, makeGetMultiSelectFilterSuggestions as makeGetFilterSuggestions, makeGetMultiSelectSelectedOptions as makeGetSelectedOptions, makeObjectConcat, filterSelectedOptions } from '../utils/dropDownUtils';
26
+ import { makeFormatOptions, makeGetMultiSelectFilterSuggestions as makeGetFilterSuggestions, makeGetMultiSelectSelectedOptions as makeGetSelectedOptions, makeObjectConcat, filterSelectedOptions, makeGetIsShowClearIcon } from '../utils/dropDownUtils';
27
27
  /* eslint-disable react/forbid-component-props */
28
28
 
29
29
  /* eslint-disable react/no-unused-prop-types */
@@ -35,7 +35,8 @@ export class MultiSelectComponent extends React.Component {
35
35
  this.getNextAriaId = getUniqueId(this);
36
36
  this.getFilterSuggestions = makeGetFilterSuggestions();
37
37
  this.formatOptions = makeFormatOptions();
38
- this.getSelectedOptions = makeGetSelectedOptions(); //Use in AdvancedMultiSelect component
38
+ this.getSelectedOptions = makeGetSelectedOptions();
39
+ this.getIsShowClearIcon = makeGetIsShowClearIcon(); //Use in AdvancedMultiSelect component
39
40
 
40
41
  this.objectConcat = makeObjectConcat();
41
42
  this.formatSelectedOptions = makeFormatOptions();
@@ -871,7 +872,8 @@ export class MultiSelectComponent extends React.Component {
871
872
  children,
872
873
  customChildrenClass,
873
874
  getFooter,
874
- needEffect
875
+ needEffect,
876
+ disabledOptions
875
877
  } = this.props;
876
878
  const {
877
879
  clearText = 'Clear all',
@@ -897,7 +899,13 @@ export class MultiSelectComponent extends React.Component {
897
899
  const suggestions = this.handleFilterSuggestions();
898
900
  const setAriaId = this.getNextAriaId();
899
901
  const ariaErrorId = this.getNextAriaId();
900
- const isShowClearIcon = !isReadOnly && !isDisabled && !disableAction && selectedOptions.length > 1;
902
+ let {
903
+ isShowClearIcon: isShowClear
904
+ } = this.getIsShowClearIcon({
905
+ selectedOptions,
906
+ disabledOptions
907
+ });
908
+ const isShowClearIcon = !isReadOnly && !isDisabled && !disableAction && isShowClear;
901
909
  return /*#__PURE__*/React.createElement("div", {
902
910
  className: `${style.wrapper} ${isDisabled ? style.disabled : ''} ${isReadOnly ? style.readOnly : ''} ${disableAction ? CssProvider('isBlock') : ''} ${borderColor === 'transparent' ? style.transparentContainer : ''} ${needEffect && !(isDisabled || isReadOnly) ? style.effect : ''}`,
903
911
  "data-id": `${isDisabled ? `${dataId}_disabled` : isReadOnly ? `${dataId}_readOnly` : dataId}`,
@@ -406,4 +406,42 @@ export const filterSelectedOptions = function () {
406
406
  return {
407
407
  newSelectedOptions: [...oldValidSelectedOptions, ...newlyAddedOptions]
408
408
  };
409
- };
409
+ };
410
+ export const makeGetIsShowClearIcon = () => createSelector([getSelectedOptionsSel, getDisabledOptions], (selectedOptions, disabledOptions) => {
411
+ let countForShowClear = 2;
412
+ let enabledOptionsLength = 0;
413
+ let isShowClearIcon = selectedOptions.length >= countForShowClear;
414
+
415
+ if (disabledOptions.length) {
416
+ let isHaveEnabledOptions = false;
417
+ let isAllDisabled = disabledOptions.length === selectedOptions.length;
418
+
419
+ if (!isAllDisabled) {
420
+ isHaveEnabledOptions = selectedOptions.some(option => {
421
+ let {
422
+ isDisabled = false
423
+ } = option || {};
424
+
425
+ if (!isDisabled) {
426
+ enabledOptionsLength += 1;
427
+
428
+ if (enabledOptionsLength === countForShowClear) {
429
+ return true;
430
+ }
431
+
432
+ return false;
433
+ }
434
+
435
+ return false;
436
+ });
437
+ }
438
+
439
+ return {
440
+ isShowClearIcon: isAllDisabled ? !isAllDisabled : isHaveEnabledOptions
441
+ };
442
+ }
443
+
444
+ return {
445
+ isShowClearIcon
446
+ };
447
+ });
@@ -110,6 +110,7 @@ var AdvancedMultiSelectComponent = /*#__PURE__*/function (_MultiSelectComponent)
110
110
  _this.state = Object.assign({}, oldState, {
111
111
  showedSelectedOptionsCount: !(0, _Common.getIsEmptyValue)(selectedOptionsLimit) && selectedOptionsLen > selectedOptionsLimit ? selectedOptionsLimit : selectedOptionsLen
112
112
  });
113
+ _this.getIsShowClearIcon = (0, _dropDownUtils.makeGetIsShowClearIcon)();
113
114
  _this.handleFilterSuggestions = _this.handleFilterSuggestions.bind(_assertThisInitialized(_this));
114
115
  _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));
115
116
  _this.handleSelectOption = _this.handleSelectOption.bind(_assertThisInitialized(_this));
@@ -257,7 +258,8 @@ var AdvancedMultiSelectComponent = /*#__PURE__*/function (_MultiSelectComponent)
257
258
  imageField = props.imageField,
258
259
  optionType = props.optionType,
259
260
  iconName = props.iconName,
260
- iconSize = props.iconSize;
261
+ iconSize = props.iconSize,
262
+ disabledOptions = props.disabledOptions;
261
263
  return this.formatSelectedOptions({
262
264
  options: selectedOptionDetails,
263
265
  valueField: valueField,
@@ -265,7 +267,8 @@ var AdvancedMultiSelectComponent = /*#__PURE__*/function (_MultiSelectComponent)
265
267
  imageField: imageField,
266
268
  optionType: optionType,
267
269
  iconName: iconName,
268
- iconSize: iconSize
270
+ iconSize: iconSize,
271
+ disabledOptions: disabledOptions
269
272
  });
270
273
  }
271
274
  }, {
@@ -412,7 +415,8 @@ var AdvancedMultiSelectComponent = /*#__PURE__*/function (_MultiSelectComponent)
412
415
  isBoxPaddingNeed = _this$props5.isBoxPaddingNeed,
413
416
  getFooter = _this$props5.getFooter,
414
417
  customProps = _this$props5.customProps,
415
- needEffect = _this$props5.needEffect;
418
+ needEffect = _this$props5.needEffect,
419
+ disabledOptions = _this$props5.disabledOptions;
416
420
  var _customProps$Suggesti = customProps.SuggestionsProps,
417
421
  SuggestionsProps = _customProps$Suggesti === void 0 ? {} : _customProps$Suggesti,
418
422
  _customProps$DropBoxP = customProps.DropBoxProps,
@@ -441,6 +445,14 @@ var AdvancedMultiSelectComponent = /*#__PURE__*/function (_MultiSelectComponent)
441
445
  var moreCount = allselectedOptionIdsLen - showedSelectedOptionsCount;
442
446
  var setAriaId = this.getNextAriaId();
443
447
  var ariaErrorId = this.getNextAriaId();
448
+
449
+ var _this$getIsShowClearI = this.getIsShowClearIcon({
450
+ selectedOptions: selectedOptions,
451
+ disabledOptions: disabledOptions
452
+ }),
453
+ isShowClear = _this$getIsShowClearI.isShowClearIcon;
454
+
455
+ var isShowClearIcon = !isReadOnly && !isDisabled && isShowClear;
444
456
  return /*#__PURE__*/_react["default"].createElement("div", {
445
457
  className: "".concat(_AdvancedMultiSelectModule["default"].wrapper, " ").concat(isDisabled ? _AdvancedMultiSelectModule["default"].disabled : '', " ").concat(borderColor === 'transparent' ? _AdvancedMultiSelectModule["default"].transparentContainer : '', " ").concat(needEffect && !(isDisabled || isReadOnly) ? _AdvancedMultiSelectModule["default"].effect : ''),
446
458
  "data-id": dataIdMultiSelectComp,
@@ -490,7 +502,7 @@ var AdvancedMultiSelectComponent = /*#__PURE__*/function (_MultiSelectComponent)
490
502
  ariaDescribedby: ariaErrorId
491
503
  },
492
504
  autoComplete: false
493
- })), !isReadOnly && !isDisabled && selectedOptions.length > 1 ? /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
505
+ })), isShowClearIcon ? /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
494
506
  className: _AdvancedMultiSelectModule["default"]["delete"],
495
507
  dataId: dataIdClearIcon,
496
508
  "data-title": clearText,
@@ -106,7 +106,8 @@ var MultiSelectComponent = /*#__PURE__*/function (_React$Component) {
106
106
  _this.getNextAriaId = (0, _IdProvider.getUniqueId)(_assertThisInitialized(_this));
107
107
  _this.getFilterSuggestions = (0, _dropDownUtils.makeGetMultiSelectFilterSuggestions)();
108
108
  _this.formatOptions = (0, _dropDownUtils.makeFormatOptions)();
109
- _this.getSelectedOptions = (0, _dropDownUtils.makeGetMultiSelectSelectedOptions)(); //Use in AdvancedMultiSelect component
109
+ _this.getSelectedOptions = (0, _dropDownUtils.makeGetMultiSelectSelectedOptions)();
110
+ _this.getIsShowClearIcon = (0, _dropDownUtils.makeGetIsShowClearIcon)(); //Use in AdvancedMultiSelect component
110
111
 
111
112
  _this.objectConcat = (0, _dropDownUtils.makeObjectConcat)();
112
113
  _this.formatSelectedOptions = (0, _dropDownUtils.makeFormatOptions)();
@@ -943,7 +944,8 @@ var MultiSelectComponent = /*#__PURE__*/function (_React$Component) {
943
944
  children = _this$props13.children,
944
945
  customChildrenClass = _this$props13.customChildrenClass,
945
946
  getFooter = _this$props13.getFooter,
946
- needEffect = _this$props13.needEffect;
947
+ needEffect = _this$props13.needEffect,
948
+ disabledOptions = _this$props13.disabledOptions;
947
949
  var _i18nKeys = i18nKeys,
948
950
  _i18nKeys$clearText = _i18nKeys.clearText,
949
951
  clearText = _i18nKeys$clearText === void 0 ? 'Clear all' : _i18nKeys$clearText,
@@ -967,7 +969,14 @@ var MultiSelectComponent = /*#__PURE__*/function (_React$Component) {
967
969
  var suggestions = this.handleFilterSuggestions();
968
970
  var setAriaId = this.getNextAriaId();
969
971
  var ariaErrorId = this.getNextAriaId();
970
- var isShowClearIcon = !isReadOnly && !isDisabled && !disableAction && selectedOptions.length > 1;
972
+
973
+ var _this$getIsShowClearI = this.getIsShowClearIcon({
974
+ selectedOptions: selectedOptions,
975
+ disabledOptions: disabledOptions
976
+ }),
977
+ isShowClear = _this$getIsShowClearI.isShowClearIcon;
978
+
979
+ var isShowClearIcon = !isReadOnly && !isDisabled && !disableAction && isShowClear;
971
980
  return /*#__PURE__*/_react["default"].createElement("div", {
972
981
  className: "".concat(_MultiSelectModule["default"].wrapper, " ").concat(isDisabled ? _MultiSelectModule["default"].disabled : '', " ").concat(isReadOnly ? _MultiSelectModule["default"].readOnly : '', " ").concat(disableAction ? (0, _CssProvider["default"])('isBlock') : '', " ").concat(borderColor === 'transparent' ? _MultiSelectModule["default"].transparentContainer : '', " ").concat(needEffect && !(isDisabled || isReadOnly) ? _MultiSelectModule["default"].effect : ''),
973
982
  "data-id": "".concat(isDisabled ? "".concat(dataId, "_disabled") : isReadOnly ? "".concat(dataId, "_readOnly") : dataId),
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.optionIdGrouping = exports.makeObjectConcat = exports.makeGetSelectedValueText = exports.makeGetOptionIdChange = exports.makeGetMultiSelectSelectedOptions = exports.makeGetMultiSelectFilterSuggestions = exports.makeGetGroupSelectOptions = exports.makeGetGroupSelectFilterSuggestions = exports.makeFormatOptions = exports.getValueField = exports.getTextField = exports.getPrefixText = exports.getOptions = exports.getOptionType = exports.getImageField = exports.getIconSize = exports.getIconName = exports.filterSelectedOptions = exports.extractOptionId = exports.dummyObj = exports.dummyArray = void 0;
6
+ exports.optionIdGrouping = exports.makeObjectConcat = exports.makeGetSelectedValueText = exports.makeGetOptionIdChange = exports.makeGetMultiSelectSelectedOptions = exports.makeGetMultiSelectFilterSuggestions = exports.makeGetIsShowClearIcon = exports.makeGetGroupSelectOptions = exports.makeGetGroupSelectFilterSuggestions = exports.makeFormatOptions = exports.getValueField = exports.getTextField = exports.getPrefixText = exports.getOptions = exports.getOptionType = exports.getImageField = exports.getIconSize = exports.getIconName = exports.filterSelectedOptions = exports.extractOptionId = exports.dummyObj = exports.dummyArray = void 0;
7
7
 
8
8
  var _reselect = require("reselect");
9
9
 
@@ -562,4 +562,47 @@ var filterSelectedOptions = function filterSelectedOptions() {
562
562
  };
563
563
  };
564
564
 
565
- exports.filterSelectedOptions = filterSelectedOptions;
565
+ exports.filterSelectedOptions = filterSelectedOptions;
566
+
567
+ var makeGetIsShowClearIcon = function makeGetIsShowClearIcon() {
568
+ return (0, _reselect.createSelector)([getSelectedOptionsSel, getDisabledOptions], function (selectedOptions, disabledOptions) {
569
+ var countForShowClear = 2;
570
+ var enabledOptionsLength = 0;
571
+ var isShowClearIcon = selectedOptions.length >= countForShowClear;
572
+
573
+ if (disabledOptions.length) {
574
+ var isHaveEnabledOptions = false;
575
+ var isAllDisabled = disabledOptions.length === selectedOptions.length;
576
+
577
+ if (!isAllDisabled) {
578
+ isHaveEnabledOptions = selectedOptions.some(function (option) {
579
+ var _ref5 = option || {},
580
+ _ref5$isDisabled = _ref5.isDisabled,
581
+ isDisabled = _ref5$isDisabled === void 0 ? false : _ref5$isDisabled;
582
+
583
+ if (!isDisabled) {
584
+ enabledOptionsLength += 1;
585
+
586
+ if (enabledOptionsLength === countForShowClear) {
587
+ return true;
588
+ }
589
+
590
+ return false;
591
+ }
592
+
593
+ return false;
594
+ });
595
+ }
596
+
597
+ return {
598
+ isShowClearIcon: isAllDisabled ? !isAllDisabled : isHaveEnabledOptions
599
+ };
600
+ }
601
+
602
+ return {
603
+ isShowClearIcon: isShowClearIcon
604
+ };
605
+ });
606
+ };
607
+
608
+ exports.makeGetIsShowClearIcon = makeGetIsShowClearIcon;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohodesk/components",
3
- "version": "1.0.0-alpha-228",
3
+ "version": "1.0.0-alpha-229",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.js",
6
6
  "jsnext:main": "es/index.js",
@@ -48,9 +48,9 @@
48
48
  "selectn": "1.1.2"
49
49
  },
50
50
  "peerDependencies": {
51
- "@zohodesk/icons": "1.0.0-beta.92",
52
- "@zohodesk/variables": "1.0.0-beta.29",
53
- "@zohodesk/svg": "1.0.0-beta.41",
51
+ "@zohodesk/icons": "^1.0.0-beta.92",
52
+ "@zohodesk/variables": "^1.0.0-beta.29",
53
+ "@zohodesk/svg": "^1.0.0-beta.41",
54
54
  "@zohodesk/virtualizer": "^1.0.3",
55
55
  "velocity-react": "^1.4.1",
56
56
  "react-sortable-hoc": "^0.8.3"