UNPKG

react-component-managers

Version:
59 lines (48 loc) 1.86 kB
"use strict"; exports.__esModule = true; exports.callFocusEventHandler = callFocusEventHandler; exports.default = createFocusManager; var _reactDom = require("react-dom"); var _timeoutManager = _interopRequireDefault(require("./timeoutManager")); var _mountManager = _interopRequireDefault(require("./mountManager")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function callFocusEventHandler(inst, focused, e) { var handler = inst.props[focused ? 'onFocus' : 'onBlur']; handler && handler(e); } function createFocusManager(instance, _temp) { var _ref = _temp === void 0 ? {} : _temp, willHandle = _ref.willHandle, didHandle = _ref.didHandle, onChange = _ref.onChange, _ref$isDisabled = _ref.isDisabled, isDisabled = _ref$isDisabled === void 0 ? function () { return !!instance.props.disabled; } : _ref$isDisabled; var lastFocused; var timeouts = (0, _timeoutManager.default)(instance); var isMounted = (0, _mountManager.default)(instance); function _handleFocus(focused, event) { if (event && event.persist) event.persist(); if (willHandle && willHandle(focused, event) === false) return; timeouts.set('focus', function () { (0, _reactDom.unstable_batchedUpdates)(function () { if (focused !== lastFocused) { if (didHandle) didHandle.call(instance, focused, event); // only fire a change when unmounted if its a blur if (isMounted() || !focused) { lastFocused = focused; onChange && onChange(focused, event); } } }); }); } return { handleBlur: function handleBlur(event) { if (!isDisabled()) _handleFocus(false, event); }, handleFocus: function handleFocus(event) { if (!isDisabled()) _handleFocus(true, event); } }; }