react-native-a11y
Version:
Improvements of a11y for ReactNative, this library improve work with reader and keyboard focus and reader in general.
42 lines • 1.32 kB
JavaScript
import { useRef, useCallback, useMemo } from "react";
import { A11yModule } from "../../../modules";
import { debounce } from "../../../utils";
const SECONDS_PER_FRAME = 16;
const COUNT_OF_FRAMES = 1;
const DEBOUNCE_DELAY = SECONDS_PER_FRAME * COUNT_OF_FRAMES;
export const useA11yOrderManager = orderRef => {
const currentRef = useRef([]);
const registeredRefs = useRef([]);
const refWasUpdated = useRef(false);
const setOrder = useCallback(() => {
A11yModule.setA11yElementsOrder({
tag: orderRef,
views: registeredRefs.current
});
}, [orderRef]);
const debounceOrder = useMemo(() => debounce(setOrder, DEBOUNCE_DELAY), [setOrder]);
const registerOrderRef = useCallback(order => ref => {
refWasUpdated.current = true;
registeredRefs.current[order] = ref;
}, []);
const updateRefList = useCallback(() => {
if (!refWasUpdated.current) {
return;
}
refWasUpdated.current = false;
currentRef.current = registeredRefs.current.filter(v => v);
debounceOrder();
}, [debounceOrder]);
const reset = useCallback(() => {
currentRef.current = [];
registeredRefs.current = [];
refWasUpdated.current = false;
}, []);
return {
registerOrderRef,
updateRefList,
reset,
setOrder
};
};
//# sourceMappingURL=useA11yOrderManager.js.map