Skip to content

Commit cb45211

Browse files
committed
refactor
1 parent 7b97532 commit cb45211

File tree

1 file changed

+26
-47
lines changed

1 file changed

+26
-47
lines changed

src/useAccessibilityInfo.ts

Lines changed: 26 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
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-
114
type AccessibilityInfoStaticInitializers =
125
| 'isBoldTextEnabled'
136
| 'isScreenReaderEnabled'
@@ -16,72 +9,58 @@ type AccessibilityInfoStaticInitializers =
169
| 'isReduceMotionEnabled'
1710
| 'isReduceTransparencyEnabled'
1811

19-
type AccessibilityEventToInfoStaticKeyMap = {
20-
[K in AccessibilityChangeEventName]?: AccessibilityInfoStaticInitializers
21-
}
22-
23-
const EVENT_NAME_TO_INITIALIZER: AccessibilityEventToInfoStaticKeyMap = {
24-
boldTextChanged: 'isBoldTextEnabled',
25-
screenReaderChanged: 'isScreenReaderEnabled',
26-
grayscaleChanged: 'isGrayscaleEnabled',
27-
invertColorsChanged: 'isInvertColorsEnabled',
28-
reduceMotionChanged: 'isReduceMotionEnabled',
29-
reduceTransparencyChanged: 'isReduceTransparencyEnabled',
30-
}
31-
3212
function useAccessibilityStateListener(
3313
eventName: AccessibilityChangeEventName,
34-
): boolean {
35-
const [isEnabled, setIsEnabled] = useState(false)
14+
initializerName: AccessibilityInfoStaticInitializers,
15+
): boolean | undefined {
16+
const [isEnabled, setIsEnabled] = useState<boolean | undefined>(undefined)
3617

3718
useEffect(() => {
38-
const initializerKey = EVENT_NAME_TO_INITIALIZER[eventName]
39-
40-
if (!initializerKey) {
19+
if (!AccessibilityInfo[initializerName]) {
4120
return
4221
}
4322

44-
AccessibilityInfo[initializerKey]().then(setIsEnabled)
23+
AccessibilityInfo[initializerName]().then(setIsEnabled)
4524
AccessibilityInfo.addEventListener(eventName, setIsEnabled)
4625

4726
return () => AccessibilityInfo.removeEventListener(eventName, setIsEnabled)
48-
}, [eventName])
27+
}, [eventName, initializerName])
4928

5029
return isEnabled
5130
}
5231

5332
export function useAccessibilityInfo(): {
54-
screenReaderEnabled: boolean
55-
boldTextEnabled: boolean
56-
grayscaleEnabled?: boolean
57-
invertColorsEnabled?: boolean
58-
reduceMotionEnabled?: boolean
59-
reduceTransparencyEnabled?: boolean
33+
screenReaderEnabled: boolean | undefined
34+
boldTextEnabled: boolean | undefined
35+
grayscaleEnabled: boolean | undefined
36+
invertColorsEnabled: boolean | undefined
37+
reduceMotionEnabled: boolean | undefined
38+
reduceTransparencyEnabled: boolean | undefined
6039
} {
61-
const screenReaderEnabled = useAccessibilityStateListener(
62-
'screenReaderChanged',
40+
const boldTextEnabled = useAccessibilityStateListener(
41+
'boldTextChanged',
42+
'isBoldTextEnabled',
43+
)
44+
const grayscaleEnabled = useAccessibilityStateListener(
45+
'grayscaleChanged',
46+
'isGrayscaleEnabled',
6347
)
64-
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')
7548
const invertColorsEnabled = useAccessibilityStateListener(
7649
'invertColorsChanged',
50+
'isInvertColorsEnabled',
7751
)
7852
const reduceMotionEnabled = useAccessibilityStateListener(
7953
'reduceMotionChanged',
54+
'isReduceMotionEnabled',
8055
)
8156
const reduceTransparencyEnabled = useAccessibilityStateListener(
8257
'reduceTransparencyChanged',
58+
'isReduceTransparencyEnabled',
59+
)
60+
const screenReaderEnabled = useAccessibilityStateListener(
61+
'screenReaderChanged',
62+
'isScreenReaderEnabled',
8363
)
84-
/* eslint-enable react-hooks/rules-of-hooks */
8564

8665
return {
8766
screenReaderEnabled,

0 commit comments

Comments
 (0)