react-native-a11y
Version:
Improvements of a11y for ReactNative, this library improve work with reader and keyboard focus and reader in general.
49 lines (48 loc) • 1.57 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useA11yOrderManager = void 0;
var _react = require("react");
var _modules = require("../../../modules");
var _utils = require("../../../utils");
const SECONDS_PER_FRAME = 16;
const COUNT_OF_FRAMES = 1;
const DEBOUNCE_DELAY = SECONDS_PER_FRAME * COUNT_OF_FRAMES;
const useA11yOrderManager = orderRef => {
const currentRef = (0, _react.useRef)([]);
const registeredRefs = (0, _react.useRef)([]);
const refWasUpdated = (0, _react.useRef)(false);
const setOrder = (0, _react.useCallback)(() => {
_modules.A11yModule.setA11yElementsOrder({
tag: orderRef,
views: registeredRefs.current
});
}, [orderRef]);
const debounceOrder = (0, _react.useMemo)(() => (0, _utils.debounce)(setOrder, DEBOUNCE_DELAY), [setOrder]);
const registerOrderRef = (0, _react.useCallback)(order => ref => {
refWasUpdated.current = true;
registeredRefs.current[order] = ref;
}, []);
const updateRefList = (0, _react.useCallback)(() => {
if (!refWasUpdated.current) {
return;
}
refWasUpdated.current = false;
currentRef.current = registeredRefs.current.filter(v => v);
debounceOrder();
}, [debounceOrder]);
const reset = (0, _react.useCallback)(() => {
currentRef.current = [];
registeredRefs.current = [];
refWasUpdated.current = false;
}, []);
return {
registerOrderRef,
updateRefList,
reset,
setOrder
};
};
exports.useA11yOrderManager = useA11yOrderManager;
//# sourceMappingURL=useA11yOrderManager.js.map
;