@atlaskit/renderer
Version:
Renderer component
73 lines (71 loc) • 3.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useSelectAllTrap = void 0;
var _analytics = require("@atlaskit/editor-common/analytics");
var _react = _interopRequireDefault(require("react"));
var _analyticsContext = _interopRequireDefault(require("../../analytics/analyticsContext"));
var _elementSelection = require("./element-selection");
var useSelectAllTrap = exports.useSelectAllTrap = function useSelectAllTrap() {
var _React$useContext = _react.default.useContext(_analyticsContext.default),
fireAnalyticsEvent = _React$useContext.fireAnalyticsEvent;
var ref = _react.default.useRef(null);
var clicked = _react.default.useRef(false);
var caught = _react.default.useRef();
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
var mac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false;
var onKeyDown = _react.default.useCallback(function (e) {
var _e$target, _e$target$matches;
var el = ref.current;
if (!el) {
return;
}
var modKey = mac ? e.metaKey : e.ctrlKey;
if (!modKey || e.code !== 'KeyA' || e.shiftKey) {
return;
}
var elementSelection = _elementSelection.ElementSelection.fromWindow();
var isInput = (_e$target = e.target) === null || _e$target === void 0 || (_e$target$matches = _e$target.matches) === null || _e$target$matches === void 0 ? void 0 : _e$target$matches.call(_e$target, 'input');
if (elementSelection.eq(caught.current) || isInput) {
fireAnalyticsEvent({
eventType: _analytics.EVENT_TYPE.TRACK,
action: _analytics.ACTION.SELECT_ALL_ESCAPED,
actionSubject: _analytics.ACTION_SUBJECT.RENDERER
});
return;
}
if (elementSelection.inside(el) || elementSelection.type === 'None' && clicked.current) {
fireAnalyticsEvent({
eventType: _analytics.EVENT_TYPE.TRACK,
action: _analytics.ACTION.SELECT_ALL_CAUGHT,
actionSubject: _analytics.ACTION_SUBJECT.RENDERER
});
e.preventDefault();
caught.current = elementSelection.select(el);
}
}, [mac, ref, fireAnalyticsEvent, clicked, caught]);
var onClick = _react.default.useCallback(function (e) {
var _ref$current$contains, _ref$current;
clicked.current = (_ref$current$contains = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.contains(e.target)) !== null && _ref$current$contains !== void 0 ? _ref$current$contains : false;
}, [ref, clicked]);
_react.default.useEffect(function () {
// Ignored via go/ees005
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
window.addEventListener('keydown', onKeyDown);
// Ignored via go/ees005
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
window.addEventListener('click', onClick);
return function () {
// Ignored via go/ees005
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
window.removeEventListener('keydown', onKeyDown);
// Ignored via go/ees005
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
window.removeEventListener('click', onClick);
};
}, [onKeyDown, onClick]);
return ref;
};