UNPKG

@atlaskit/renderer

Version:
73 lines (71 loc) 3.4 kB
"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; };