Description:
React Context and hook to add support for nested, auto-dismissable layers. State can be globally controlled through context.
How to use it:
1. Install the component with NPM.
# Yarn $ yarn add react-dismissable-layers # NPM $ npm i react-dismissable-layers --save
2. React hook.
import { useDismissable } from 'react-dismissable-layers';
const Component = () => {
const [open, toggleOpen] = useDismissable(false);
return <div>
<button onClick={toggleOpen}>Open Tooltip</button>
{open && (
<Popper>
Tooltip Content
</Popper>
)}
</div>
}3. React context.
import { DismissableLayerContext } from 'react-dismissable-layers';
const OtherComponent = () => {
const dismissOverlay = React.useContext(DismissableLayerContext);
const close = React.useCallback(() => {
dismissOverlay.dismissAllGlobally();
}, [])
return <button onClick={close}>Close All</button>
}4. Default options for the useDismissable hook.
/** * ref for the popper content, to do not close on the content's [dismissEvent] action */ ref?: RefObject<Element>; /** * callback which will be invoked when the popper is closed */ onClose?: null | VoidFunction; /** * event on which popper will be closed, default is `'click'` */ dismissEvent?: DismissEventType; /** * the popper will be closed just by the [dismissEvent] action, without any layers logic, default is `false` */ disableLayers?: boolean; /** * do not close on default prevented events, default is `true` */ skipDefaultPrevented?: boolean;
