Skip to content

Commit a6822d5

Browse files
committed
improve step prop
1 parent 6375774 commit a6822d5

File tree

3 files changed

+37
-11
lines changed

3 files changed

+37
-11
lines changed

README.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -346,10 +346,17 @@ The `<Slider/>` component has the following configuration properties:
346346
</tr>
347347
<tr>
348348
<td>step</td>
349-
<td>number</td>
349+
<td>number(integer)</td>
350350
<td>Step value of the slider. The value should be between 0 and maximumValue - minimumValue)</td>
351351
<td>❌</td>
352352
<td>undefined</td>
353+
</tr>
354+
<tr>
355+
<td>steps</td>
356+
<td>number(integer)</td>
357+
<td>Count of segmented sliders.</td>
358+
<td>❌</td>
359+
<td>undefined</td>
353360
</tr>
354361
<tr>
355362
<td>snapToStep</td>

example/src/App.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export default function App() {
204204
minimumValue={min10}
205205
style={styles.slider}
206206
maximumValue={max110}
207-
step={10}
207+
steps={10}
208208
onHapticFeedback={() => {
209209
Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy);
210210
}}

src/slide.tsx

+28-9
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,17 @@ import Animated, {
2020
withTiming,
2121
withRepeat,
2222
withSequence,
23+
configureReanimatedLogger,
24+
ReanimatedLogLevel,
2325
} from 'react-native-reanimated';
2426
import { Bubble, BubbleRef } from './ballon';
2527
import { palette } from './theme/palette';
2628
import { clamp } from './utils';
29+
30+
configureReanimatedLogger({
31+
level: ReanimatedLogLevel.warn,
32+
strict: false,
33+
});
2734
const formatSeconds = (second: number) => `${Math.round(second * 100) / 100}`;
2835
const hitSlop = {
2936
top: 12,
@@ -185,8 +192,14 @@ export type AwesomeSliderProps = {
185192
*/
186193
thumbScaleValue?: Animated.SharedValue<number>;
187194
panHitSlop?: Insets;
188-
195+
/**
196+
* @deprecated use `steps` instead.
197+
*/
189198
step?: number;
199+
/**
200+
* Count of segmented sliders.
201+
*/
202+
steps?: number;
190203
/**
191204
* withTiming options when step is defined. if false, no animation will be used. default false.
192205
*/
@@ -217,30 +230,34 @@ export type AwesomeSliderProps = {
217230
*
218231
* @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#activeoffsetxvalue-number--number
219232
*/
220-
activeOffsetX?: number | number[];
233+
activeOffsetX?:
234+
| number
235+
| [activeOffsetXStart: number, activeOffsetXEnd: number];
221236
/**
222237
* Range along Y axis (in points) where fingers travels without activation of
223238
* gesture. Moving outside of this range implies activation of gesture.
224239
*
225240
* @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#activeoffsetyvalue-number--number
226241
*/
227-
activeOffsetY?: number | number[];
242+
activeOffsetY?:
243+
| number
244+
| [activeOffsetYStart: number, activeOffsetYEnd: number];
228245
/**
229246
* When the finger moves outside this range (in points) along X axis and
230247
* gesture hasn't yet activated it will fail recognizing the gesture. Range
231248
* can be given as an array or a single number.
232249
*
233250
* @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#failoffsetyvalue-number--number
234251
*/
235-
failOffsetX?: number | number[];
252+
failOffsetX?: number | [failOffsetXStart: number, failOffsetXEnd: number];
236253
/**
237254
* When the finger moves outside this range (in points) along Y axis and
238255
* gesture hasn't yet activated it will fail recognizing the gesture. Range
239256
* can be given as an array or a single number
240257
*
241258
* @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#failoffsetxvalue-number--number
242259
*/
243-
failOffsetY?: number | number[];
260+
failOffsetY?: number | [failOffsetYStart: number, failOffsetYEnd: number];
244261
/**
245262
* When 'heartbeat' is set to true, the progress bar color will animate back and forth between its current color and the color specified for the heartbeat.
246263
*/
@@ -285,7 +302,8 @@ export const Slider: FC<AwesomeSliderProps> = memo(function Slider({
285302
renderMark,
286303
setBubbleText,
287304
sliderHeight = 5,
288-
step,
305+
step: propsStep,
306+
steps,
289307
stepTimingOptions = false,
290308
style,
291309
testID,
@@ -299,6 +317,7 @@ export const Slider: FC<AwesomeSliderProps> = memo(function Slider({
299317
failOffsetY,
300318
heartbeat = false,
301319
}) {
320+
const step = propsStep || steps;
302321
const snappingEnabled = snapToStep && step;
303322
const bubbleRef = useRef<BubbleRef>(null);
304323
const isScrubbingInner = useSharedValue(false);
@@ -437,7 +456,7 @@ export const Slider: FC<AwesomeSliderProps> = memo(function Slider({
437456
},
438457
],
439458
};
440-
});
459+
}, [bubbleTranslateY, bubbleWidth, width]);
441460

442461
const animatedCacheXStyle = useAnimatedStyle(() => {
443462
const cacheX =
@@ -448,7 +467,7 @@ export const Slider: FC<AwesomeSliderProps> = memo(function Slider({
448467
return {
449468
width: cacheX,
450469
};
451-
});
470+
}, [cache, sliderTotalValue, width]);
452471

453472
const animatedHeartbeatStyle = useAnimatedStyle(() => {
454473
// Goes to one and zero continuously
@@ -469,7 +488,7 @@ export const Slider: FC<AwesomeSliderProps> = memo(function Slider({
469488
width: sliderWidth,
470489
opacity,
471490
};
472-
});
491+
}, [sliderWidth, heartbeat]);
473492

474493
const onSlideAcitve = useCallback(
475494
(seconds: number) => {

0 commit comments

Comments
 (0)