Skip to content

Commit 15d83f0

Browse files
authored
fix(RangeSlider): new value api (#287)
1 parent d5ad3df commit 15d83f0

File tree

7 files changed

+15
-44
lines changed

7 files changed

+15
-44
lines changed

.changeset/afraid-crabs-clean.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@cube-dev/ui-kit": minor
3+
---
4+
5+
Change RangeSlider API to accept only array with two numbers as a value.

src/components/forms/Form/ComplexForm.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ const Template: StoryFn<typeof Form> = (args) => {
220220
radioGroup: 'three',
221221
switch: false,
222222
slider: 60,
223-
rangeSlider: { start: 20, end: 40 },
223+
rangeSlider: [20, 40],
224224
}}
225225
onSubmit={(v) => {
226226
console.log('onSubmit:', v);

src/components/forms/Slider/RangeSlider.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export default {
1010
args: {
1111
id: 'name',
1212
width: '100%',
13-
defaultValue: { start: 4, end: 12 },
13+
defaultValue: [4, 12],
1414
minValue: 0,
1515
maxValue: 20,
1616
step: 2,

src/components/forms/Slider/RangeSlider.tsx

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@ import { forwardRef } from 'react';
22

33
import { SliderThumb } from './SliderThumb';
44
import { SliderTrack } from './SliderTrack';
5-
import {
6-
SliderBase,
7-
SliderBaseChildArguments,
8-
SliderBaseProps,
9-
} from './SliderBase';
5+
import { SliderBase, SliderBaseChildArguments } from './SliderBase';
106
import { Gradation } from './Gradation';
117

12-
import type { DOMRef, RangeValue } from '@react-types/shared';
8+
import type { DOMRef } from '@react-types/shared';
139
import type { CubeSliderBaseProps } from './types';
10+
import type { RangeValue } from '../../../shared';
1411

1512
export interface CubeRangeSliderProps
1613
extends CubeSliderBaseProps<RangeValue<number>> {
@@ -23,39 +20,10 @@ const INTL_MESSAGES = {
2320
};
2421

2522
function RangeSlider(props: CubeRangeSliderProps, ref: DOMRef<HTMLDivElement>) {
26-
let {
27-
onChange,
28-
onChangeEnd,
29-
value,
30-
defaultValue,
31-
getValueLabel,
32-
isDisabled,
33-
styles,
34-
gradation,
35-
...otherProps
36-
} = props;
37-
38-
let baseProps: Omit<SliderBaseProps<number[]>, 'children'> = {
39-
...otherProps,
40-
value: value != null ? [value.start, value.end] : undefined,
41-
defaultValue:
42-
defaultValue != null
43-
? [defaultValue.start, defaultValue.end]
44-
: // make sure that useSliderState knows we have two handles
45-
[props.minValue ?? 0, props.maxValue ?? 100],
46-
onChange(v) {
47-
onChange?.({ start: v[0], end: v[1] });
48-
},
49-
onChangeEnd(v) {
50-
onChangeEnd?.({ start: v[0], end: v[1] });
51-
},
52-
getValueLabel: getValueLabel
53-
? ([start, end]) => getValueLabel?.({ start, end })
54-
: undefined,
55-
};
23+
let { isDisabled, styles, gradation, ...otherProps } = props;
5624

5725
return (
58-
<SliderBase {...otherProps} {...baseProps}>
26+
<SliderBase {...(otherProps as CubeSliderBaseProps<number[]>)}>
5927
{({ trackRef, inputRef, state }: SliderBaseChildArguments) => {
6028
return (
6129
<>

src/components/forms/Slider/SliderBase.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ function SliderBase(
4949
labelSuffix,
5050
labelStyles,
5151
necessityIndicator,
52-
defaultValue,
53-
value,
5452
gradation,
5553
isDisabled,
5654
inputStyles,

src/components/forms/Slider/types.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import {
66
} from '../../../tasty';
77
import { FormFieldProps } from '../../../shared';
88

9-
import type { AriaSliderProps, SliderProps } from '@react-types/slider';
9+
import type { AriaSliderProps } from '@react-types/slider';
1010

1111
export interface CubeSliderBaseProps<T>
1212
extends Omit<AriaSliderProps<T>, 'label'>,
13-
Omit<SliderProps<T>, 'label'>,
1413
BasePropsWithoutChildren,
1514
OuterStyleProps,
1615
FormFieldProps,
@@ -27,5 +26,5 @@ export interface CubeSliderBaseProps<T>
2726
/** Whether the value's label is displayed. True by default if there's a `label`, false by default if not. */
2827
showValueLabel?: boolean;
2928
/** A function that returns the content to display as the value's label. Overrides default formatted number. */
30-
getValueLabel?: (value: any) => string | undefined;
29+
getValueLabel?: (value: T) => string | undefined;
3130
}

src/shared/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ export * from './form';
22

33
export type Axis = 'top' | 'right' | 'bottom' | 'left';
44
export type PlacementAxis = Axis | 'center';
5+
export type RangeValue<T> = [T, T];

0 commit comments

Comments
 (0)