UNPKG

@atlaskit/spotlight

Version:

A spotlight introduces users to points of interest, from focused messages to multi-step tours.

53 lines 1.27 kB
import { useContext, useEffect } from 'react'; import { getDocument } from '@atlaskit/browser-apis'; import { SpotlightContext } from '../../controllers/context'; const defaultOptions = { childList: true, subtree: true }; export const UNSAFE_UpdateOnChange = ({ selectors = ['body'], options = defaultOptions }) => { const { popoverContent } = useContext(SpotlightContext); const { update } = popoverContent; useEffect(() => { if (!update || selectors.length === 0) { return; } const doc = getDocument(); if (!doc) { return; } const elements = new Set(); selectors.forEach(selector => { const element = doc.querySelector(selector); if (!element) { return; } elements.add(element); }); if (elements.size === 0) { return; } const observers = []; elements.forEach(element => { const observer = new MutationObserver(mutations => { if (mutations.length === 0) { return; } update(); }); observer.observe(element, options); observers.push(observer); }); return () => { observers.forEach(observer => observer.disconnect()); }; }, [selectors, options, update]); return null; };