@atlaskit/editor-plugin-mentions
Version:
Mentions plugin for @atlaskit/editor-core
46 lines (43 loc) • 1.35 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useFocusTrap = void 0;
var _react = require("react");
var _focusTrap = _interopRequireDefault(require("focus-trap"));
/**
* Custom hook to add focus trap
* used for focus trap in ReactionPicker
* copied from useFocusManager in @atlaskit/popup
*/
var useFocusTrap = exports.useFocusTrap = function useFocusTrap(_ref) {
var targetRef = _ref.targetRef,
_ref$enabled = _ref.enabled,
enabled = _ref$enabled === void 0 ? true : _ref$enabled;
(0, _react.useEffect)(function () {
if (!targetRef || !enabled) {
return;
}
var trapConfig = {
clickOutsideDeactivates: true,
escapeDeactivates: true,
initialFocus: targetRef,
fallbackFocus: targetRef,
returnFocusOnDeactivate: true
};
var focusTrap = (0, _focusTrap.default)(targetRef, trapConfig);
// wait for the popup to reposition itself before we focus
var frameId = requestAnimationFrame(function () {
frameId = null;
focusTrap.activate();
});
return function () {
if (frameId !== null) {
cancelAnimationFrame(frameId);
frameId = null;
}
focusTrap.deactivate();
};
}, [targetRef, enabled]);
};