UNPKG

react-component-managers

Version:
47 lines (43 loc) 1.6 kB
import { unstable_batchedUpdates as batchedUpdates } from 'react-dom'; import createTimeoutManager from './timeoutManager'; import createMountManager from './mountManager'; export function callFocusEventHandler(inst, focused, e) { var handler = inst.props[focused ? 'onFocus' : 'onBlur']; handler && handler(e); } export default 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 = createTimeoutManager(instance); var isMounted = createMountManager(instance); function _handleFocus(focused, event) { if (event && event.persist) event.persist(); if (willHandle && willHandle(focused, event) === false) return; timeouts.set('focus', function () { 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); } }; }