react-native-gesture-handler
Version:
Declarative API exposing native platform touch and gesture system to React Native
48 lines (38 loc) • 1.62 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useMountReactions = useMountReactions;
var _utils = require("../../utils");
var _mountRegistry = require("../../../mountRegistry");
var _react = require("react");
function shouldUpdateDetector(relation, gesture) {
if (relation === undefined) {
return false;
}
for (const tag of (0, _utils.transformIntoHandlerTags)(relation)) {
if (tag === gesture.handlerTag) {
return true;
}
}
return false;
}
function useMountReactions(updateDetector, state) {
(0, _react.useEffect)(() => {
return _mountRegistry.MountRegistry.addMountListener(gesture => {
// At this point the ref in the gesture config should be updated, so we can check if one of the gestures
// set in a relation with the gesture got mounted. If so, we need to update the detector to propagate
// the changes to the native side.
for (const attachedGesture of state.attachedGestures) {
const blocksHandlers = attachedGesture.config.blocksHandlers;
const requireToFail = attachedGesture.config.requireToFail;
const simultaneousWith = attachedGesture.config.simultaneousWith;
if (shouldUpdateDetector(blocksHandlers, gesture) || shouldUpdateDetector(requireToFail, gesture) || shouldUpdateDetector(simultaneousWith, gesture)) {
updateDetector(); // We can safely return here, if any other gestures should be updated, they will be by the above call
return;
}
}
});
}, [updateDetector, state]);
}
//# sourceMappingURL=useMountReactions.js.map
;