UNPKG

ahooks

Version:
40 lines (39 loc) 1.53 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = useFocusWithin; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _useEventListener = _interopRequireDefault(require("../useEventListener")); function useFocusWithin(target, options) { var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), isFocusWithin = _useState2[0], setIsFocusWithin = _useState2[1]; var _ref = options || {}, onFocus = _ref.onFocus, onBlur = _ref.onBlur, onChange = _ref.onChange; (0, _useEventListener["default"])('focusin', function (e) { if (!isFocusWithin) { onFocus === null || onFocus === void 0 ? void 0 : onFocus(e); onChange === null || onChange === void 0 ? void 0 : onChange(true); setIsFocusWithin(true); } }, { target: target }); (0, _useEventListener["default"])('focusout', function (e) { var _a, _b; if (isFocusWithin && !((_b = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.contains) === null || _b === void 0 ? void 0 : _b.call(_a, e.relatedTarget))) { onBlur === null || onBlur === void 0 ? void 0 : onBlur(e); onChange === null || onChange === void 0 ? void 0 : onChange(false); setIsFocusWithin(false); } }, { target: target }); return isFocusWithin; }