@useblu/ocean-react 1.53.0 → 1.54.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.54.0](https://github.com/ocean-ds/ocean-web/compare/v1.53.0...v1.54.0) (2024-03-25)
7
+
8
+ ### Features
9
+
10
+ - add multi choice options on chips ([#1092](https://github.com/ocean-ds/ocean-web/issues/1092)) ([fc239e5](https://github.com/ocean-ds/ocean-web/commit/fc239e5e66b556c2c1580aab1735077e378e17c7))
11
+
6
12
  # [1.53.0](https://github.com/ocean-ds/ocean-web/compare/v1.52.2...v1.53.0) (2024-03-21)
7
13
 
8
14
  ### Features
package/Chips/Chips.d.ts CHANGED
@@ -1,15 +1,20 @@
1
1
  import React from 'react';
2
+ export declare type ChipValue = {
3
+ label: string;
4
+ value: string;
5
+ };
2
6
  interface IChips {
3
7
  label: string;
4
- counter?: string | number;
5
8
  icon?: React.ReactNode;
6
9
  disabled?: boolean;
7
- options?: Array<{
8
- label: string;
9
- value: any;
10
- }>;
10
+ multiChoice?: boolean;
11
+ options?: ChipValue[];
12
+ defaultValue?: ChipValue;
13
+ clearLabel?: string;
14
+ filterLabel?: string;
15
+ initialCounter?: number;
11
16
  onClick?: () => void;
12
- onChange?: (value: any) => void;
17
+ onChange?: (value: ChipValue[] | ChipValue) => void;
13
18
  }
14
19
  declare const Chips: React.FunctionComponent<IChips>;
15
20
  export default Chips;
@@ -1 +1 @@
1
- {"version":3,"file":"Chips.d.ts","sourceRoot":"","sources":["../../src/Chips/Chips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAMjD,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACjC;AAED,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAgF1C,CAAC;AAIF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Chips.d.ts","sourceRoot":"","sources":["../../src/Chips/Chips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAMjD,oBAAY,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,KAAK,IAAI,CAAC;CACrD;AAED,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CA+I1C,CAAC;AAIF,eAAe,KAAK,CAAC"}
@@ -1,10 +1,14 @@
1
1
  import React from 'react';
2
+ import { ChipValue } from './Chips';
2
3
  interface IOptions {
3
- options: Array<{
4
- label: string;
5
- value: any;
6
- }>;
7
- onSelect: (label: string, value: any) => void;
4
+ options: Array<ChipValue>;
5
+ selectedOptions?: ChipValue[];
6
+ clearLabel: string;
7
+ filterLabel: string;
8
+ multiChoice: boolean;
9
+ onSelect: (label: string, value: string) => void;
10
+ filterOptions: () => void;
11
+ clearOptions: () => void;
8
12
  }
9
13
  declare const Options: React.FunctionComponent<IOptions>;
10
14
  export default Options;
@@ -1 +1 @@
1
- {"version":3,"file":"Options.d.ts","sourceRoot":"","sources":["../../src/Chips/Options.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,QAAQ;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/C;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAc9C,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Options.d.ts","sourceRoot":"","sources":["../../src/Chips/Options.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,UAAU,QAAQ;IAChB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1B,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CA4D9C,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/index.es.js CHANGED
@@ -46421,27 +46421,33 @@ var CardListItem = function (_a) {
46421
46421
  };
46422
46422
 
46423
46423
  var Options = function (_a) {
46424
- var options = _a.options, onSelect = _a.onSelect;
46425
- return (e.createElement("div", { className: "ods-chips__options" }, options.map(function (_a) {
46426
- var label = _a.label, value = _a.value;
46427
- return (e.createElement("button", { key: label, type: "button", value: value, onClick: function () { return onSelect(label, value); }, className: "ods-chips__options--option" }, label));
46428
- })));
46424
+ var options = _a.options, _b = _a.selectedOptions, selectedOptions = _b === void 0 ? [] : _b, clearLabel = _a.clearLabel, filterLabel = _a.filterLabel, multiChoice = _a.multiChoice, onSelect = _a.onSelect, filterOptions = _a.filterOptions, clearOptions = _a.clearOptions;
46425
+ var columns = multiChoice ? Math.ceil(10 / 5) : 1;
46426
+ return (e.createElement("div", { className: "ods-chips__options", "data-testid": "ods-chips-option" },
46427
+ e.createElement("div", { className: classNames('ods-chips__options--content', "ods-chips__options--content--columns-".concat(columns)) }, options.map(function (_a) {
46428
+ var label = _a.label, value = _a.value;
46429
+ return (e.createElement("button", { key: label, type: "button", value: value, onClick: function () { return onSelect(label, value); }, className: "ods-chips__options--option" },
46430
+ multiChoice && (e.createElement(Checkbox, { checked: !!selectedOptions.find(function (option) { return option.value === value; }), readOnly: true })),
46431
+ label));
46432
+ })),
46433
+ multiChoice && (e.createElement("div", { className: "ods-chips__options--footer" },
46434
+ e.createElement("button", { type: "button", onClick: clearOptions, className: "ods-btn ods-btn--sm ods-btn--text" }, clearLabel),
46435
+ e.createElement("button", { type: "button", onClick: filterOptions, className: "ods-btn ods-btn--sm ods-btn--primary" }, filterLabel)))));
46429
46436
  };
46430
46437
 
46431
46438
  var Chips = function (_a) {
46432
- var label = _a.label, counter = _a.counter, icon = _a.icon, disabled = _a.disabled, options = _a.options, onClick = _a.onClick, onChange = _a.onChange;
46439
+ var label = _a.label, icon = _a.icon, disabled = _a.disabled, defaultValue = _a.defaultValue, _b = _a.options, options = _b === void 0 ? [] : _b, _c = _a.multiChoice, multiChoice = _c === void 0 ? false : _c, _d = _a.clearLabel, clearLabel = _d === void 0 ? 'Limpar' : _d, _e = _a.filterLabel, filterLabel = _e === void 0 ? 'Filtrar' : _e, initialCounter = _a.initialCounter, onClick = _a.onClick, onChange = _a.onChange;
46433
46440
  var wrapperRef = useRef(null);
46434
- var _b = e.useState(false), selectionIsOpen = _b[0], setSelectionIsOpen = _b[1];
46435
- var _c = e.useState({
46436
- label: '',
46437
- value: null
46438
- }), selectedOption = _c[0], setSelectedOption = _c[1];
46439
- useEffect(function () {
46440
- function handleClickOutside(event) {
46441
- if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {
46442
- setSelectionIsOpen(false);
46443
- }
46441
+ var _f = e.useState(0), counter = _f[0], setCounter = _f[1];
46442
+ var _g = e.useState(false), selectionIsOpen = _g[0], setSelectionIsOpen = _g[1];
46443
+ var _h = e.useState(defaultValue || multiChoice ? [] : { label: '', value: '' }), selectedOptions = _h[0], setSelectedOptions = _h[1];
46444
+ function handleClickOutside(event) {
46445
+ var target = event.target;
46446
+ if (wrapperRef.current && !wrapperRef.current.contains(target)) {
46447
+ setSelectionIsOpen(false);
46444
46448
  }
46449
+ }
46450
+ useEffect(function () {
46445
46451
  document.addEventListener('mousedown', handleClickOutside);
46446
46452
  return function () {
46447
46453
  document.removeEventListener('mousedown', handleClickOutside);
@@ -46456,23 +46462,63 @@ var Chips = function (_a) {
46456
46462
  }
46457
46463
  };
46458
46464
  var handleSelectOption = function (labelProp, value) {
46459
- setSelectedOption({ label: labelProp, value: value });
46465
+ if (!multiChoice) {
46466
+ setSelectedOptions({ label: labelProp, value: value });
46467
+ setSelectionIsOpen(false);
46468
+ if (onChange) {
46469
+ onChange({ label: labelProp, value: value });
46470
+ }
46471
+ return;
46472
+ }
46473
+ if (Array.isArray(selectedOptions)) {
46474
+ var copyOptions = __spreadArray$1([], selectedOptions, true);
46475
+ if (selectedOptions.find(function (option) { return option.value === value; })) {
46476
+ copyOptions = copyOptions.filter(function (option) { return option.value !== value; });
46477
+ }
46478
+ else {
46479
+ copyOptions.push({ label: labelProp, value: value });
46480
+ }
46481
+ setCounter(copyOptions.length);
46482
+ setSelectedOptions(copyOptions);
46483
+ if (onChange) {
46484
+ onChange(copyOptions);
46485
+ }
46486
+ }
46487
+ };
46488
+ var displayValue = function () {
46489
+ if (!Array.isArray(selectedOptions)) {
46490
+ return selectedOptions.value ? selectedOptions.label : label;
46491
+ }
46492
+ return label;
46493
+ };
46494
+ var clearOptions = function () {
46495
+ setSelectedOptions([]);
46496
+ setCounter(0);
46497
+ setSelectionIsOpen(false);
46498
+ if (onChange) {
46499
+ onChange([]);
46500
+ }
46501
+ };
46502
+ var filterOptions = function () {
46460
46503
  setSelectionIsOpen(false);
46461
46504
  if (onChange) {
46462
- onChange({ label: labelProp, value: value });
46505
+ onChange(selectedOptions);
46463
46506
  }
46464
46507
  };
46465
46508
  return (e.createElement("div", { className: "ods-chips", ref: wrapperRef },
46466
46509
  e.createElement("button", { type: "button", onClick: handleClickChips, disabled: disabled, className: classNames('ods-chips__button', {
46467
46510
  'ods-chips__button--disabled': disabled,
46468
- 'ods-chips__button--active': selectionIsOpen || !!selectedOption.value
46511
+ 'ods-chips__button--active': selectionIsOpen ||
46512
+ (Array.isArray(selectedOptions)
46513
+ ? selectedOptions.length > 0
46514
+ : selectedOptions === null || selectedOptions === void 0 ? void 0 : selectedOptions.value)
46469
46515
  }) },
46470
46516
  icon || undefined,
46471
- e.createElement("p", { className: "ods-chips__label" }, selectedOption.value ? selectedOption.label : label),
46472
- counter && (e.createElement(Badge, { color: "brand", className: "ods-chips__badge" }, counter)),
46517
+ e.createElement("p", { className: "ods-chips__label" }, displayValue()),
46518
+ (counter > 0 || initialCounter) && (e.createElement(Badge, { color: "brand", className: "ods-chips__badge" }, initialCounter !== null && initialCounter !== void 0 ? initialCounter : counter)),
46473
46519
  options && (options === null || options === void 0 ? void 0 : options.length) > 0 && !selectionIsOpen && e.createElement(J, null),
46474
46520
  options && (options === null || options === void 0 ? void 0 : options.length) > 0 && selectionIsOpen && e.createElement(re, null)),
46475
- selectionIsOpen && options && (e.createElement(Options, { options: options, onSelect: handleSelectOption }))));
46521
+ selectionIsOpen && options && (e.createElement(Options, { options: options, onSelect: handleSelectOption, selectedOptions: Array.isArray(selectedOptions) ? selectedOptions : undefined, clearLabel: clearLabel, filterLabel: filterLabel, multiChoice: multiChoice, clearOptions: clearOptions, filterOptions: filterOptions }))));
46476
46522
  };
46477
46523
  Chips.displayName = 'Chips';
46478
46524