UNPKG

@momentum-ui/react-collaboration

Version:

Cisco Momentum UI Framework for React Collaboration Applications

35 lines (33 loc) 1.19 kB
import type { Plugin } from 'tippy.js'; import { PopoverInstance } from '..'; import { STYLE } from '../Popover.constants'; /** * Due to @react-aria's event abstraction layer, we add an invisible backdrop for all popovers * to not interfere with any components built with the hooks from @react-aria. * * This will make sure that popovers are closed on clickoutside and no longer * be stuck open in case the even target was a @react-aria button. */ export const addBackdropPlugin: Plugin = { name: 'addBackdropPlugin', fn(instance: PopoverInstance) { return { onMount() { if (!instance.props.trigger.includes('mouseenter')) { const backdrop = document.createElement('div'); backdrop.addEventListener('click', (e) => { e.stopPropagation(); e.preventDefault(); instance.hide(); }); backdrop.classList.add(STYLE.backdrop); backdrop.setAttribute('aria-hidden', 'true'); document.querySelector('[data-tippy-root]')?.parentNode?.append(backdrop); } }, onHide() { document.querySelector(`.${STYLE.backdrop}`)?.remove(); }, }; }, };