UNPKG

1.41 kBJavaScriptView Raw
1"use strict";
2
3exports.__esModule = true;
4exports.default = useFocusManager;
5
6var _react = require("react");
7
8var _useFocusManager = _interopRequireDefault(require("@restart/hooks/useFocusManager"));
9
10var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
11
12var _useMounted = _interopRequireDefault(require("@restart/hooks/useMounted"));
13
14var _matches = _interopRequireDefault(require("dom-helpers/matches"));
15
16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18const isInDisabledFieldset = node => {
19 return !!node && (0, _matches.default)(node, 'fieldset[disabled] *');
20};
21
22function useFocusManager(ref, props = {}, opts = {}) {
23 const isMounted = (0, _useMounted.default)();
24 const [focused, setFocus] = (0, _react.useState)(false);
25 const isDisabled = (0, _useEventCallback.default)(() => props.disabled === true || isInDisabledFieldset(ref.current));
26 const events = (0, _useFocusManager.default)(Object.assign({}, opts, {
27 isDisabled,
28 onChange: focused => {
29 if (isMounted()) setFocus(focused);
30 },
31
32 didHandle(focused, event) {
33 let handler = props[focused ? 'onFocus' : 'onBlur'];
34 if (handler) handler(event); // @ts-ignore used by work
35
36 if (opts.didHandle && !event.isWidgetDefaultPrevented) opts.didHandle(focused, event);
37 }
38
39 }));
40 return [events, focused, setFocus];
41}
\No newline at end of file