@atlaskit/spotlight
Version:
A spotlight introduces users to points of interest, from focused messages to multi-step tours.
59 lines (58 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.UNSAFE_UpdateOnChange = void 0;
var _react = require("react");
var _browserApis = require("@atlaskit/browser-apis");
var _context = require("../../controllers/context");
var defaultOptions = {
childList: true,
subtree: true
};
var UNSAFE_UpdateOnChange = exports.UNSAFE_UpdateOnChange = function UNSAFE_UpdateOnChange(_ref) {
var _ref$selectors = _ref.selectors,
selectors = _ref$selectors === void 0 ? ['body'] : _ref$selectors,
_ref$options = _ref.options,
options = _ref$options === void 0 ? defaultOptions : _ref$options;
var _useContext = (0, _react.useContext)(_context.SpotlightContext),
popoverContent = _useContext.popoverContent;
var update = popoverContent.update;
(0, _react.useEffect)(function () {
if (!update || selectors.length === 0) {
return;
}
var doc = (0, _browserApis.getDocument)();
if (!doc) {
return;
}
var elements = new Set();
selectors.forEach(function (selector) {
var element = doc.querySelector(selector);
if (!element) {
return;
}
elements.add(element);
});
if (elements.size === 0) {
return;
}
var observers = [];
elements.forEach(function (element) {
var observer = new MutationObserver(function (mutations) {
if (mutations.length === 0) {
return;
}
update();
});
observer.observe(element, options);
observers.push(observer);
});
return function () {
observers.forEach(function (observer) {
return observer.disconnect();
});
};
}, [selectors, options, update]);
return null;
};