"use strict"; exports.__esModule = true; exports.default = useResponderEvents; var React = _interopRequireWildcard(require("react")); var ResponderSystem = _interopRequireWildcard(require("./ResponderSystem")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /** * Copyright (c) Nicolas Gallagher * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * */ /** * Hook for integrating the Responder System into React * * function SomeComponent({ onStartShouldSetResponder }) { * const ref = useRef(null); * useResponderEvents(ref, { onStartShouldSetResponder }); * return
* } */ var emptyObject = {}; var idCounter = 0; function useStable(getInitialValue) { var ref = React.useRef(null); if (ref.current == null) { ref.current = getInitialValue(); } return ref.current; } function useResponderEvents(hostRef, config) { if (config === void 0) { config = emptyObject; } var id = useStable(function () { return idCounter++; }); var isAttachedRef = React.useRef(false); // This is a separate effects so it doesn't run when the config changes. // On initial mount, attach global listeners if needed. // On unmount, remove node potentially attached to the Responder System. React.useEffect(function () { ResponderSystem.attachListeners(); return function () { ResponderSystem.removeNode(id); }; }, [id]); // Register and unregister with the Responder System as necessary React.useEffect(function () { var _config = config, onMoveShouldSetResponder = _config.onMoveShouldSetResponder, onMoveShouldSetResponderCapture = _config.onMoveShouldSetResponderCapture, onScrollShouldSetResponder = _config.onScrollShouldSetResponder, onScrollShouldSetResponderCapture = _config.onScrollShouldSetResponderCapture, onSelectionChangeShouldSetResponder = _config.onSelectionChangeShouldSetResponder, onSelectionChangeShouldSetResponderCapture = _config.onSelectionChangeShouldSetResponderCapture, onStartShouldSetResponder = _config.onStartShouldSetResponder, onStartShouldSetResponderCapture = _config.onStartShouldSetResponderCapture; var requiresResponderSystem = onMoveShouldSetResponder != null || onMoveShouldSetResponderCapture != null || onScrollShouldSetResponder != null || onScrollShouldSetResponderCapture != null || onSelectionChangeShouldSetResponder != null || onSelectionChangeShouldSetResponderCapture != null || onStartShouldSetResponder != null || onStartShouldSetResponderCapture != null; var node = hostRef.current; if (requiresResponderSystem) { ResponderSystem.addNode(id, node, config); isAttachedRef.current = true; } else if (isAttachedRef.current) { ResponderSystem.removeNode(id); isAttachedRef.current = false; } }, [config, hostRef, id]); React.useDebugValue({ isResponder: hostRef.current === ResponderSystem.getResponderNode() }); React.useDebugValue(config); } module.exports = exports.default;