Skip to content

Commit 4099689

Browse files
Fix: onAccessibilityAction causes crash (#368)
* Explicitly implement the AccessibilityAction into Slider * Replace custom event with react-native AccessibilityActionEvent * Fix linting errors * Update snapshots
1 parent a0b3d2d commit 4099689

File tree

2 files changed

+49
-31
lines changed

2 files changed

+49
-31
lines changed

src/js/Slider.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
'use strict';
1212

1313
import React from 'react';
14-
import {Image, Platform, StyleSheet} from 'react-native';
14+
import {
15+
Image,
16+
Platform,
17+
StyleSheet,
18+
AccessibilityActionEvent,
19+
} from 'react-native';
1520
import RCTSliderNativeComponent from './RNCSliderNativeComponent';
1621

1722
import type {Ref} from 'react';
@@ -247,6 +252,7 @@ const SliderComponent = (
247252
onValueChange,
248253
onSlidingStart,
249254
onSlidingComplete,
255+
onAccessibilityAction,
250256
...localProps
251257
} = props;
252258

@@ -277,6 +283,11 @@ const SliderComponent = (
277283
onSlidingComplete(event.nativeEvent.value);
278284
}
279285
: null;
286+
const onAccessibilityActionEvent = onAccessibilityAction
287+
? (event: AccessibilityActionEvent) => {
288+
onAccessibilityAction(event.nativeEvent.value);
289+
}
290+
: null;
280291

281292
return (
282293
<RCTSliderNativeComponent
@@ -297,6 +308,7 @@ const SliderComponent = (
297308
onStartShouldSetResponder={() => true}
298309
onResponderTerminationRequest={() => false}
299310
accessibilityState={_accessibilityState}
311+
onRNCSliderAccessibilityAction={onAccessibilityActionEvent}
300312
/>
301313
);
302314
};

src/js/__tests__/__snapshots__/Slider.test.js.snap

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ exports[`<Slider /> accessibilityState disabled sets disabled={true} 1`] = `
1313
maximumValue={1}
1414
minimumValue={0}
1515
onChange={null}
16+
onRNCSliderAccessibilityAction={null}
1617
onRNCSliderSlidingComplete={null}
1718
onRNCSliderSlidingStart={null}
1819
onRNCSliderValueChange={null}
@@ -43,6 +44,38 @@ exports[`<Slider /> disabled prop overrides accessibilityState.disabled 1`] = `
4344
maximumValue={1}
4445
minimumValue={0}
4546
onChange={null}
47+
onRNCSliderAccessibilityAction={null}
48+
onRNCSliderSlidingComplete={null}
49+
onRNCSliderSlidingStart={null}
50+
onRNCSliderValueChange={null}
51+
onResponderTerminationRequest={[Function]}
52+
onStartShouldSetResponder={[Function]}
53+
step={0}
54+
style={
55+
Object {
56+
"height": 40,
57+
}
58+
}
59+
tapToSeek={false}
60+
thumbImage={null}
61+
value={0}
62+
/>
63+
`;
64+
65+
exports[`<Slider /> disabled prop overrides accessibilityState.enabled 1`] = `
66+
<RNCSlider
67+
accessibilityState={
68+
Object {
69+
"disabled": false,
70+
}
71+
}
72+
disabled={false}
73+
enabled={true}
74+
inverted={false}
75+
maximumValue={1}
76+
minimumValue={0}
77+
onChange={null}
78+
onRNCSliderAccessibilityAction={null}
4679
onRNCSliderSlidingComplete={null}
4780
onRNCSliderSlidingStart={null}
4881
onRNCSliderValueChange={null}
@@ -70,6 +103,7 @@ exports[`<Slider /> renders a slider with custom props 1`] = `
70103
minimumTrackTintColor="blue"
71104
minimumValue={-1}
72105
onChange={[Function]}
106+
onRNCSliderAccessibilityAction={null}
73107
onRNCSliderSlidingComplete={[Function]}
74108
onRNCSliderSlidingStart={null}
75109
onRNCSliderValueChange={[Function]}
@@ -101,6 +135,7 @@ exports[`<Slider /> renders disabled slider 1`] = `
101135
maximumValue={1}
102136
minimumValue={0}
103137
onChange={null}
138+
onRNCSliderAccessibilityAction={null}
104139
onRNCSliderSlidingComplete={null}
105140
onRNCSliderSlidingStart={null}
106141
onRNCSliderValueChange={null}
@@ -126,36 +161,7 @@ exports[`<Slider /> renders enabled slider 1`] = `
126161
maximumValue={1}
127162
minimumValue={0}
128163
onChange={null}
129-
onRNCSliderSlidingComplete={null}
130-
onRNCSliderSlidingStart={null}
131-
onRNCSliderValueChange={null}
132-
onResponderTerminationRequest={[Function]}
133-
onStartShouldSetResponder={[Function]}
134-
step={0}
135-
style={
136-
Object {
137-
"height": 40,
138-
}
139-
}
140-
tapToSeek={false}
141-
thumbImage={null}
142-
value={0}
143-
/>
144-
`;
145-
146-
exports[`<Slider /> disabled prop overrides accessibilityState.enabled 1`] = `
147-
<RNCSlider
148-
accessibilityState={
149-
Object {
150-
"disabled": false,
151-
}
152-
}
153-
disabled={false}
154-
enabled={true}
155-
inverted={false}
156-
maximumValue={1}
157-
minimumValue={0}
158-
onChange={null}
164+
onRNCSliderAccessibilityAction={null}
159165
onRNCSliderSlidingComplete={null}
160166
onRNCSliderSlidingStart={null}
161167
onRNCSliderValueChange={null}

0 commit comments

Comments
 (0)