@sebgroup/green-react 1.8.0 → 1.8.1
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/index.js +39 -38
- package/package.json +1 -1
- package/src/types/props/index.d.ts +1 -1
package/index.js
CHANGED
|
@@ -3429,6 +3429,7 @@ function Slider({
|
|
|
3429
3429
|
}) {
|
|
3430
3430
|
const [background, setBackground] = React.useState();
|
|
3431
3431
|
const [sliderValue, setSliderValue] = React.useState(value !== null && value !== void 0 ? value : defaultValue);
|
|
3432
|
+
const [inputFieldValue, setInputFieldValue] = React.useState(sliderValue + '');
|
|
3432
3433
|
React.useLayoutEffect(() => {
|
|
3433
3434
|
if (disabled) {
|
|
3434
3435
|
setBackground(sliderColors.disabled);
|
|
@@ -3438,60 +3439,60 @@ function Slider({
|
|
|
3438
3439
|
if (sliderValue !== undefined) percent = (sliderValue - min) / (max - min) * 100;
|
|
3439
3440
|
setBackground(getSliderTrackBackground(percent));
|
|
3440
3441
|
}, [disabled, sliderValue]);
|
|
3441
|
-
const clamp =
|
|
3442
|
-
if (!enableClamping
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
}
|
|
3449
|
-
if (newValue > max) {
|
|
3450
|
-
hasClamped = true;
|
|
3451
|
-
newValue = max;
|
|
3452
|
-
}
|
|
3453
|
-
if (hasClamped && onClamp) onClamp(origValue);
|
|
3454
|
-
return newValue;
|
|
3442
|
+
const clamp = unclamped => {
|
|
3443
|
+
if (!enableClamping) return Number(unclamped);
|
|
3444
|
+
if (typeof unclamped === 'string') unclamped = Number(unclamped);
|
|
3445
|
+
if (!unclamped || Number.isNaN(unclamped)) return min;
|
|
3446
|
+
const clamped = Math.min(Math.max(min, unclamped), max);
|
|
3447
|
+
if (clamped !== unclamped && onClamp) onClamp(unclamped);
|
|
3448
|
+
return clamped;
|
|
3455
3449
|
};
|
|
3456
|
-
const
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3450
|
+
const setNumValue = value => {
|
|
3451
|
+
if (value === '') value = min;
|
|
3452
|
+
const unclamped = Number(value);
|
|
3453
|
+
const clamped = clamp(unclamped);
|
|
3454
|
+
setSliderValue(clamped);
|
|
3455
|
+
return [unclamped, clamped];
|
|
3461
3456
|
};
|
|
3462
3457
|
React.useEffect(() => {
|
|
3463
|
-
|
|
3458
|
+
setNumValue(value);
|
|
3464
3459
|
}, [value]);
|
|
3465
|
-
const handleChange =
|
|
3466
|
-
const
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3460
|
+
const handleChange = value => {
|
|
3461
|
+
const [unclamped, clamped] = setNumValue(value);
|
|
3462
|
+
setInputFieldValue(unclamped + '');
|
|
3463
|
+
if (onChange) onChange(clamped);
|
|
3464
|
+
};
|
|
3465
|
+
const handleInputFieldChange = (value, shouldClamp = false) => {
|
|
3466
|
+
handleChange(value);
|
|
3467
|
+
if (value === '') setInputFieldValue('');else if (shouldClamp) setInputFieldValue(clamp(value) + '');
|
|
3471
3468
|
};
|
|
3472
3469
|
return jsxs(Fragment, {
|
|
3473
|
-
children: [
|
|
3470
|
+
children: [jsxs("div", Object.assign({
|
|
3474
3471
|
className: "gds-slider-label-container"
|
|
3475
3472
|
}, {
|
|
3476
|
-
children: [
|
|
3477
|
-
children:
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3473
|
+
children: [jsx("div", {
|
|
3474
|
+
children: label && jsxs(Fragment, {
|
|
3475
|
+
children: [jsx("label", Object.assign({
|
|
3476
|
+
htmlFor: name
|
|
3477
|
+
}, {
|
|
3478
|
+
children: label
|
|
3479
|
+
})), instruction && jsx("p", {
|
|
3480
|
+
children: instruction
|
|
3481
|
+
})]
|
|
3482
|
+
})
|
|
3484
3483
|
}), hasTextbox && jsx(InputWrapper, Object.assign({
|
|
3485
3484
|
unitLabel: unitLabel
|
|
3486
3485
|
}, {
|
|
3487
3486
|
children: jsx("input", {
|
|
3488
3487
|
type: "number",
|
|
3489
|
-
value:
|
|
3488
|
+
value: inputFieldValue,
|
|
3490
3489
|
id: `${name}-textbox`,
|
|
3491
3490
|
name: name,
|
|
3492
3491
|
className: errorMessage ? 'is-invalid' : '',
|
|
3493
3492
|
disabled: disabled,
|
|
3494
|
-
onChange:
|
|
3493
|
+
onChange: e => handleInputFieldChange(e.currentTarget.value),
|
|
3494
|
+
onKeyDown: e => e.key === 'Enter' && handleInputFieldChange(e.currentTarget.value, true),
|
|
3495
|
+
onBlur: e => handleInputFieldChange(e.currentTarget.value, true),
|
|
3495
3496
|
min: min,
|
|
3496
3497
|
max: max,
|
|
3497
3498
|
onInvalid: e => {
|
|
@@ -3508,7 +3509,7 @@ function Slider({
|
|
|
3508
3509
|
max: max,
|
|
3509
3510
|
step: step,
|
|
3510
3511
|
disabled: disabled,
|
|
3511
|
-
onChange: handleChange,
|
|
3512
|
+
onChange: e => handleChange(e.currentTarget.value),
|
|
3512
3513
|
style: {
|
|
3513
3514
|
background
|
|
3514
3515
|
}
|
package/package.json
CHANGED
|
@@ -25,7 +25,7 @@ export interface SliderProps {
|
|
|
25
25
|
hasTextbox?: boolean;
|
|
26
26
|
unitLabel?: string;
|
|
27
27
|
disabled?: boolean;
|
|
28
|
-
onChange?: (value: number
|
|
28
|
+
onChange?: (value: number) => void;
|
|
29
29
|
enableClamping?: boolean;
|
|
30
30
|
onClamp?: (value: number) => void;
|
|
31
31
|
/**
|