Skip to content

Commit 7842610

Browse files
committed
support RN59
1 parent b8df9f2 commit 7842610

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@ yarn add @react-native-community/hooks
3838
import { useAccessibilityInfo } from '@react-native-community/hooks'
3939

4040
const {
41-
reduceMotionEnabled,
41+
boldTextEnabled,
4242
screenReaderEnabled,
43-
grayscaleEnabled,
44-
invertColorsEnabled,
45-
reduceTransparencyEnabled,
46-
boldTextEnabled
43+
reduceMotionEnabled, // requires RN60 or newer
44+
grayscaleEnabled, // requires RN60 or newer
45+
invertColorsEnabled, // requires RN60 or newer
46+
reduceTransparencyEnabled // requires RN60 or newer
4747
} = useAccessibilityInfo()
4848
```
4949

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"release-canary": "auto canary"
1616
},
1717
"peerDependencies": {
18-
"react": ">=16.8.6",
19-
"react-native": ">=0.60"
18+
"react": ">=16.8.0",
19+
"react-native": ">=0.59"
2020
},
2121
"devDependencies": {
2222
"@auto-it/all-contributors": "9.28.3",

src/useAccessibilityInfo.ts

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import {useEffect, useState} from 'react'
22
import {AccessibilityInfo, AccessibilityChangeEventName} from 'react-native'
33

4+
const SUPPORTS_RN60_ACCESSIBILITY_INFO_API = !!(
5+
AccessibilityInfo.isGrayscaleEnabled &&
6+
AccessibilityInfo.isInvertColorsEnabled &&
7+
AccessibilityInfo.isReduceMotionEnabled &&
8+
AccessibilityInfo.isReduceTransparencyEnabled
9+
)
10+
411
type AccessibilityInfoStaticInitializers =
512
| 'isBoldTextEnabled'
613
| 'isScreenReaderEnabled'
@@ -35,27 +42,36 @@ function useAccessibilityStateListener(
3542
}
3643

3744
AccessibilityInfo[initializerKey]().then(setIsEnabled)
38-
AccessibilityInfo.addEventListener(
39-
eventName,
40-
setIsEnabled,
41-
)
45+
AccessibilityInfo.addEventListener(eventName, setIsEnabled)
4246

43-
return () =>
44-
AccessibilityInfo.removeEventListener(
45-
eventName,
46-
setIsEnabled,
47-
)
47+
return () => AccessibilityInfo.removeEventListener(eventName, setIsEnabled)
4848
}, [eventName])
4949

5050
return isEnabled
5151
}
5252

53-
export function useAccessibilityInfo() {
53+
export function useAccessibilityInfo(): {
54+
screenReaderEnabled: Boolean
55+
boldTextEnabled: Boolean
56+
grayscaleEnabled?: Boolean
57+
invertColorsEnabled?: Boolean
58+
reduceMotionEnabled?: Boolean
59+
reduceTransparencyEnabled?: Boolean
60+
} {
5461
const screenReaderEnabled = useAccessibilityStateListener(
5562
'screenReaderChanged',
5663
)
57-
const grayscaleEnabled = useAccessibilityStateListener('grayscaleChanged')
5864
const boldTextEnabled = useAccessibilityStateListener('boldTextChanged')
65+
66+
if (!SUPPORTS_RN60_ACCESSIBILITY_INFO_API) {
67+
return {
68+
screenReaderEnabled,
69+
boldTextEnabled,
70+
}
71+
}
72+
73+
/* eslint-disable react-hooks/rules-of-hooks */
74+
const grayscaleEnabled = useAccessibilityStateListener('grayscaleChanged')
5975
const invertColorsEnabled = useAccessibilityStateListener(
6076
'invertColorsChanged',
6177
)
@@ -65,6 +81,7 @@ export function useAccessibilityInfo() {
6581
const reduceTransparencyEnabled = useAccessibilityStateListener(
6682
'reduceTransparencyChanged',
6783
)
84+
/* eslint-enable react-hooks/rules-of-hooks */
6885

6986
return {
7087
screenReaderEnabled,

0 commit comments

Comments
 (0)