labsense-ui-kit 1.3.57 → 1.3.58

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.
@@ -56,6 +56,8 @@ interface MultiSelectDropdownProps {
56
56
  required?: boolean;
57
57
  searchBox?: boolean;
58
58
  NoOptionsText?: string;
59
+ selectAllOption?: boolean;
60
+ selectAllLabel?: string;
59
61
  }
60
62
  declare const MultiSelectDropdown: React.FC<MultiSelectDropdownProps>;
61
63
  export default MultiSelectDropdown;
package/dist/index.js CHANGED
@@ -7945,11 +7945,16 @@ var OptionComponent = function OptionComponent(_ref9) {
7945
7945
  }) : [].concat(selectedOptions, [currentOption]);
7946
7946
  onChange === null || onChange === void 0 ? void 0 : onChange(newOption);
7947
7947
  };
7948
- var SortedOptions = [].concat(options).sort(function (a, b) {
7949
- return a.labelText.localeCompare(b.labelText);
7950
- }).filter(function (option) {
7948
+ var filteredOptions = options.filter(function (option) {
7951
7949
  return option.labelText.toLowerCase().includes(searchQuery.toLowerCase());
7952
7950
  });
7951
+ var firstOption = filteredOptions[0],
7952
+ restOptions = filteredOptions.slice(1);
7953
+ var finalOptions = (firstOption === null || firstOption === void 0 ? void 0 : firstOption.value) === '__SELECT_ALL__' ? [firstOption].concat(restOptions.sort(function (a, b) {
7954
+ return a.labelText.localeCompare(b.labelText);
7955
+ })) : filteredOptions.sort(function (a, b) {
7956
+ return a.labelText.localeCompare(b.labelText);
7957
+ });
7953
7958
  return React__default.createElement(Container, {
7954
7959
  "$flexDirection": 'column',
7955
7960
  "$gap": '8px',
@@ -7970,18 +7975,22 @@ var OptionComponent = function OptionComponent(_ref9) {
7970
7975
  onChange: handleSearchChange,
7971
7976
  "$inputColor": searchbarTextColor,
7972
7977
  "$placeholderColor": placeholderColor
7973
- })), React__default.createElement(OptionContainer, null, SortedOptions.length > 0 ? SortedOptions.map(function (option, id) {
7978
+ })), React__default.createElement(OptionContainer, null, finalOptions.length > 0 ? finalOptions.map(function (option, id) {
7974
7979
  return React__default.createElement(OptionItem, {
7975
7980
  key: option.value,
7976
7981
  "$optionBorder": optionBorder,
7977
- "$isborder": id !== SortedOptions.length - 1
7982
+ "$isborder": id !== finalOptions.length - 1
7978
7983
  }, React__default.createElement(OptionLabel, {
7979
7984
  htmlFor: option.value,
7980
7985
  "$optionColor": optionColor
7981
7986
  }, React__default.createElement("input", {
7982
7987
  id: option.value,
7983
7988
  type: 'checkbox',
7984
- checked: selectedOptions.includes(option.value),
7989
+ checked: option.value === '__SELECT_ALL__' ? options.filter(function (o) {
7990
+ return o.value !== '__SELECT_ALL__';
7991
+ }).every(function (o) {
7992
+ return selectedOptions.includes(o.value);
7993
+ }) : selectedOptions.includes(option.value),
7985
7994
  onChange: function onChange() {
7986
7995
  return handleOptionToggle(option.value);
7987
7996
  }
@@ -8252,7 +8261,11 @@ var MultiSelectDropdown = function MultiSelectDropdown(_ref31) {
8252
8261
  _ref31$searchBox = _ref31.searchBox,
8253
8262
  searchBox = _ref31$searchBox === void 0 ? true : _ref31$searchBox,
8254
8263
  _ref31$NoOptionsText = _ref31.NoOptionsText,
8255
- NoOptionsText = _ref31$NoOptionsText === void 0 ? 'No Options Available' : _ref31$NoOptionsText;
8264
+ NoOptionsText = _ref31$NoOptionsText === void 0 ? 'No Options Available' : _ref31$NoOptionsText,
8265
+ _ref31$selectAllOptio = _ref31.selectAllOption,
8266
+ selectAllOption = _ref31$selectAllOptio === void 0 ? false : _ref31$selectAllOptio,
8267
+ _ref31$selectAllLabel = _ref31.selectAllLabel,
8268
+ selectAllLabel = _ref31$selectAllLabel === void 0 ? 'Select All' : _ref31$selectAllLabel;
8256
8269
  var themeColors = useTheme();
8257
8270
  var _useState = React.useState(false),
8258
8271
  dropUp = _useState[0],
@@ -8303,6 +8316,29 @@ var MultiSelectDropdown = function MultiSelectDropdown(_ref31) {
8303
8316
  }));
8304
8317
  }
8305
8318
  };
8319
+ var SELECT_ALL_VALUE = '__SELECT_ALL__';
8320
+ var computedOptions = React__default.useMemo(function () {
8321
+ if (!selectAllOption) return options;
8322
+ return [{
8323
+ value: SELECT_ALL_VALUE,
8324
+ labelText: selectAllLabel
8325
+ }].concat(options);
8326
+ }, [options, selectAllOption, selectAllLabel]);
8327
+ var allOptionValues = options.map(function (opt) {
8328
+ return opt.value;
8329
+ });
8330
+ var handleOptionChange = function handleOptionChange(values) {
8331
+ if (values.includes(SELECT_ALL_VALUE)) {
8332
+ var isAllSelected = allOptionValues.every(function (v) {
8333
+ return selectedOptions.includes(v);
8334
+ });
8335
+ handleSelectChange(isAllSelected ? [] : allOptionValues);
8336
+ return;
8337
+ }
8338
+ handleSelectChange(values.filter(function (v) {
8339
+ return v !== SELECT_ALL_VALUE;
8340
+ }));
8341
+ };
8306
8342
  return React__default.createElement(Container$2, null, title && React__default.createElement(TitleText, {
8307
8343
  "$titleColor": titleColor || themeColors.vms.text.dark,
8308
8344
  "$titleSize": titleSize,
@@ -8368,9 +8404,9 @@ var MultiSelectDropdown = function MultiSelectDropdown(_ref31) {
8368
8404
  bottom: dropUp ? 'calc(100% + 8px)' : 'auto'
8369
8405
  }
8370
8406
  }, React__default.createElement(OptionComponent, {
8371
- options: options,
8407
+ options: computedOptions,
8372
8408
  selectedOptions: selectedOptions,
8373
- onChange: handleSelectChange,
8409
+ onChange: handleOptionChange,
8374
8410
  placeholder: placeholder,
8375
8411
  placeholderColor: placeholderColor,
8376
8412
  optionBorder: optionBorder,