diff --git a/packages/grafana-ui/src/components/Alert/Alert.mdx b/packages/grafana-ui/src/components/Alert/Alert.mdx index 0c9a1ada63a..9f8ecba65a8 100644 --- a/packages/grafana-ui/src/components/Alert/Alert.mdx +++ b/packages/grafana-ui/src/components/Alert/Alert.mdx @@ -1,4 +1,4 @@ -import { Meta, Story, Preview, Props } from '@storybook/addon-docs/blocks'; +import { Meta, Props } from '@storybook/addon-docs/blocks'; import { Alert } from './Alert'; diff --git a/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.mdx b/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.mdx new file mode 100644 index 00000000000..720098c0591 --- /dev/null +++ b/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.mdx @@ -0,0 +1,18 @@ +import { Meta, Props } from '@storybook/addon-docs/blocks'; +import { ClickOutsideWrapper } from './ClickOutsideWrapper'; + + + +# ClickOutsideWrapper + +A wrapper component that detects clicks outside of the elements by attaching event listener to `window` or `document` objects. +Useful for components that require an action being triggered when a click outside has occurred, for example closing an overlay or popup. + +# Usage + +```jsx + console.log('Clicked outside')}> +
Container
+
+```` + diff --git a/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.story.tsx b/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.story.tsx new file mode 100644 index 00000000000..8746e6b2904 --- /dev/null +++ b/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.story.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { action } from '@storybook/addon-actions'; +import { ClickOutsideWrapper } from './ClickOutsideWrapper'; +import { withCenteredStory } from '../../utils/storybook/withCenteredStory'; +import mdx from './ClickOutsideWrapper.mdx'; + +export default { + title: 'Layout/ClickOutsideWrapper', + component: ClickOutsideWrapper, + decorators: [withCenteredStory], + parameters: { + docs: { + page: mdx, + }, + }, +}; + +export const basic = () => { + return ( + +
Container
+
+ ); +}; diff --git a/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.tsx b/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.tsx index abd35792d46..227058a4530 100644 --- a/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.tsx +++ b/packages/grafana-ui/src/components/ClickOutsideWrapper/ClickOutsideWrapper.tsx @@ -3,15 +3,15 @@ import ReactDOM from 'react-dom'; export interface Props { /** - * When clicking outside of current element + * Callback to trigger when clicking outside of current element occurs. */ onClick: () => void; /** * Runs the 'onClick' function when pressing a key outside of the current element. Defaults to true. */ includeButtonPress: boolean; + /** Object to attach the click event listener to. */ parent: Window | Document; - /** * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener. Defaults to false. */ @@ -35,7 +35,7 @@ export class ClickOutsideWrapper extends PureComponent { componentDidMount() { this.props.parent.addEventListener('click', this.onOutsideClick, this.props.useCapture); if (this.props.includeButtonPress) { - // Use keyup since keydown already has an eventlistener on window + // Use keyup since keydown already has an event listener on window this.props.parent.addEventListener('keyup', this.onOutsideClick, this.props.useCapture); } }