@lunit/oui 2.2.2 → 2.2.3

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.
@@ -1,3 +1,3 @@
1
1
  import { ThresholdProps } from './Threshold.types';
2
- declare const Threshold: ({ componentType, title, totalScore, totalCells, statisticItems, options, description, controlStep, onChangeDropdown, onSliderChangeCommitted, }: ThresholdProps) => import("react/jsx-runtime").JSX.Element;
2
+ declare const Threshold: ({ componentType, title, totalScore, totalCells, statisticItems, options, description, controlStep, isLoading, onChangeDropdown, onSliderChangeCommitted, onClickUpdateConfiguration, }: ThresholdProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default Threshold;
@@ -10,20 +10,24 @@ import { Button, Dropdown, DropdownItem } from '../../components';
10
10
  import { HorizonDivider } from '../HorizonDivider';
11
11
  import { FreeText } from '../FreeText';
12
12
  import { getPresetValue, getSliderMarks } from './Threshold.utils';
13
- const Threshold = ({ componentType = 'threshold', title, totalScore, totalCells, statisticItems, options, description, controlStep = 1, onChangeDropdown, onSliderChangeCommitted, }) => {
13
+ const Threshold = ({ componentType = 'threshold', title, totalScore, totalCells, statisticItems, options, description, controlStep = 1, isLoading = false, onChangeDropdown, onSliderChangeCommitted, onClickUpdateConfiguration, }) => {
14
14
  const [selectedItem, setSelectedItem] = useState(options[0].title.toString());
15
15
  const [selectedValue, setSelectedValue] = useState(options[0].value);
16
+ const [selectedOptionValue, setSelectedOptionValue] = useState(options[0].value);
16
17
  const [isPresetSelected, setIsPresetSelected] = useState(options[0].isPreset);
18
+ const [isThresholdChanged, setIsThresholdChanged] = useState(false);
17
19
  const presetValue = getPresetValue(options, selectedItem);
18
20
  const marks = getSliderMarks(presetValue);
19
21
  const handleChange = (event) => {
20
22
  setSelectedItem(event.target.value);
21
23
  setSelectedValue(options.find((option) => option.title === event.target.value)?.value);
24
+ setSelectedOptionValue(options.find((option) => option.title === event.target.value)?.value);
22
25
  setIsPresetSelected(options.find((option) => option.title === event.target.value)?.isPreset || false);
23
26
  onChangeDropdown(event);
24
27
  };
25
28
  const handleSliderChange = (event, value) => {
26
29
  setSelectedValue(value);
30
+ setIsThresholdChanged(value !== selectedOptionValue);
27
31
  };
28
32
  return (_jsxs(Container, { children: [_jsx(Score, { ...totalScore }), _jsx(Statistic, { ...totalCells }), statisticItems.map((item) => {
29
33
  return (_jsx(Statistic, { ...item }, uuidV4()));
@@ -31,6 +35,6 @@ const Threshold = ({ componentType = 'threshold', title, totalScore, totalCells,
31
35
  return (_jsx(DropdownItem, { value: option.title, children: option.title }, option.title));
32
36
  }) }), _jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', paddingTop: '36px', gap: '6px' }, children: [_jsx(BaseSlider, { disabled: isPresetSelected, step: controlStep, value: selectedValue, valueLabelDisplay: "on", defaultThreshold: presetValue, marks: marks, onChange: handleSliderChange, onChangeCommitted: onSliderChangeCommitted }), !isPresetSelected && (_jsx(Button, { label: "Update Configuration", sx: {
33
37
  width: '100%',
34
- } })), isPresetSelected && description?.preset && (_jsx(FreeText, { componentType: "freeText", size: "small-dimmed", content: description.preset })), !isPresetSelected && description?.user && (_jsx(FreeText, { componentType: "freeText", size: "small-dimmed", content: description.user }))] })] }));
38
+ }, disabled: !isThresholdChanged || isLoading, onClick: onClickUpdateConfiguration, loading: isLoading })), isPresetSelected && description?.preset && (_jsx(FreeText, { componentType: "freeText", size: "small-dimmed", content: description.preset })), !isPresetSelected && description?.user && (_jsx(FreeText, { componentType: "freeText", size: "small-dimmed", content: description.user }))] })] }));
35
39
  };
36
40
  export default Threshold;
@@ -25,6 +25,8 @@ export interface ThresholdSpec {
25
25
  export interface ThresholdProps extends ThresholdSpec {
26
26
  onChangeDropdown: (event: SelectChangeEvent) => void;
27
27
  onSliderChangeCommitted: (event: Event | SyntheticEvent, value: number | number[]) => void;
28
+ onClickUpdateConfiguration: () => void;
29
+ isLoading?: boolean;
28
30
  }
29
31
  export interface BaseSliderProps extends SliderProps {
30
32
  defaultThreshold: number;
@@ -1,4 +1,4 @@
1
1
  import Threshold from './Threshold';
2
- import type { ThresholdProps } from './Threshold.types';
2
+ import type { ThresholdProps, ThresholdSpec } from './Threshold.types';
3
3
  export { Threshold };
4
- export type { ThresholdProps };
4
+ export type { ThresholdProps, ThresholdSpec };
@@ -14,7 +14,7 @@ const ToggleControl = ({ componentType = 'toggle', title, size = 'medium', symbo
14
14
  const [isChecked, setIsChecked] = useState(checked);
15
15
  const handleChange = (event) => {
16
16
  setIsChecked(event.target.checked);
17
- onChange && onChange(event);
17
+ onChange && onChange(event, event.target.checked);
18
18
  };
19
19
  return (_jsxs(ToggleControlOuter, { "data-toggle-name": `toggle-control-${title?.replace(/\s/g, '-')}`, hasBar: !!bar || !!content.length, style: { marginBottom: isParent ? '4px' : '0' }, children: [_jsxs(ToggleControlContainer, { className: "toggle-inner-container", size: size, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: '6px' }, className: "toggle-label", children: [!!tooltip.length && (_jsx(Tooltip, { arrow: true, size: "large", title: _jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: tooltip.map((item) => (_jsxs(Box, { children: [item.componentType === 'freeText' && (_jsx(FreeText, { componentType: item.componentType, size: item.size, content: item.content })), item.componentType === 'statistic' && (_jsx(Statistic, { componentType: item.componentType, title: item.title, size: item.size, layout: item.layout, symbol: item.symbol, color: item.color }))] }, uuidV4()))) }), children: _jsx(Box, { sx: {
20
20
  display: 'flex',
@@ -48,6 +48,6 @@ export interface ToggleControlProps extends ToggleControlSpec {
48
48
  disabled?: boolean;
49
49
  target?: TargetSpec;
50
50
  isMaster?: boolean;
51
- onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
51
+ onChange: (event: React.ChangeEvent<HTMLInputElement>, toggle: boolean) => void;
52
52
  }
53
53
  export {};
@@ -19,18 +19,20 @@ const ToggleControlGroup = ({ componentType = 'toggleGroup', size = 'medium', ti
19
19
  setChildrenChecked(newState);
20
20
  }
21
21
  }
22
- onChange(event);
22
+ onChange(event, event.target.checked, childrenChecked);
23
23
  };
24
- const handleMultiChange = (index) => {
24
+ const handleMultiChange = (index, event) => {
25
25
  const newState = [...childrenChecked];
26
26
  newState[index] = !newState[index];
27
27
  setChildrenChecked(newState);
28
+ onChange(event, toggleChecked, newState);
28
29
  };
29
30
  const handleExclusiveChange = (index, event) => {
30
31
  const newState = Array(childrenChecked.length).fill(false);
31
32
  setChildrenChecked(newState);
32
33
  newState[index] = event.target.checked;
33
34
  setChildrenChecked(newState);
35
+ onChange(event, toggleChecked, newState);
34
36
  };
35
37
  useEffect(() => {
36
38
  if (behavior === 'exclusive') {
@@ -49,9 +51,11 @@ const ToggleControlGroup = ({ componentType = 'toggleGroup', size = 'medium', ti
49
51
  }
50
52
  }, [behavior, childToggles, childrenChecked.length]);
51
53
  return (_jsxs(ToggleControlGroupContainer, { children: [_jsx(ToggleControl, { isParent: true, componentType: "toggle", bar: bar, disabled: disabled, size: size, title: title, tooltip: tooltip, checked: toggleChecked, onChange: handleToggleChange }), childToggles?.map((child, index) => {
52
- return (_jsx(ToggleControl, { componentType: "toggle", title: child.title, size: size, tooltip: child.tooltip, symbol: child.symbol, color: child.color, isDimmed: !toggleChecked, checked: childrenChecked[index], disabled: !toggleChecked, onChange: (event) => {
53
- behavior === 'multi' ? handleMultiChange(index) : handleExclusiveChange(index, event);
54
- child.onChange(event);
54
+ return (_jsx(ToggleControl, { componentType: "toggle", title: child.title, size: size, tooltip: child.tooltip, symbol: child.symbol, color: child.color, isDimmed: !toggleChecked, checked: childrenChecked[index], disabled: !toggleChecked, onChange: (event, toggle) => {
55
+ behavior === 'multi'
56
+ ? handleMultiChange(index, event)
57
+ : handleExclusiveChange(index, event);
58
+ child.onChange(event, toggle);
55
59
  }, bar: child.bar }, uuidV4()));
56
60
  })] }));
57
61
  };
@@ -16,6 +16,6 @@ export interface ToggleGroupControlSpec {
16
16
  childToggles: ToggleControlProps[];
17
17
  }
18
18
  export interface ToggleControlGroupProps extends ToggleGroupControlSpec {
19
- onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
19
+ onChange: (event: React.ChangeEvent<HTMLInputElement>, parent: boolean, children: Array<boolean | undefined>) => void;
20
20
  disabled?: boolean;
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunit/oui",
3
- "version": "2.2.2",
3
+ "version": "2.2.3",
4
4
  "validate-branch-name": {
5
5
  "pattern": "^(main|develop)|(feature|fix|release|hotfix|qe)/.+$",
6
6
  "errorMsg": "The branch name is not correct. Please check the pattern. (ex. feature/add-something)"