react-component-managers
Version:
react-component-managers React component
59 lines (48 loc) • 1.86 kB
JavaScript
;
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);
}
};
}