@atlaskit/spotlight
Version:
A spotlight introduces users to points of interest, from focused messages to multi-step tours.
32 lines • 852 B
JavaScript
import { useContext, useEffect } from 'react';
import { bind } from 'bind-event-listener';
import { getDocument } from '@atlaskit/browser-apis';
import { SpotlightContext } from '../../controllers/context';
export const useOnClickOutside = onClickOutside => {
const {
card
} = useContext(SpotlightContext);
const ref = card.ref;
useEffect(() => {
const doc = getDocument();
if (!doc) {
return;
}
const unbindMouseUp = bind(doc, {
type: 'mouseup',
listener: event => {
if (!ref || !ref.current) {
return;
}
const target = event.target instanceof Node ? event.target : null;
if (ref.current.contains(target)) {
return;
}
onClickOutside(event);
}
});
return () => {
unbindMouseUp();
};
}, [onClickOutside, ref]);
};